网上看了很多多线程里继承Thread 类和实现Runnable 接口的区别,大同小异,说下我的观点吧

区别一

创建线程的方式不同:

  • 实现Runnable接口是代理模式,交给Thread()类去start;
    如:new Thread(new MyRunnable(),"线程名").start();

  • 一个类继承Thread类以后本身就是一个线程对象,可以直接start;
    如:new MyThread().satrt();

区别二

设置线程名方式不同

  • 实现Runnable接口可以在创建线程时Thread类的构造器设置线程名
    如:new Thread(new MyRunnable(),"线程名").start();
  • 继承Thread类,可以super()调用父类构造器起名,如图2

区别三

获取线程名方式不同:

  • 实现Runnable接口获取线程名方式:
System.out.println(Thread.currentThread().getName());
  • 继承Thread类本身就是线程,获取线程名方式两种都可以:
System.out.println(Thread.currentThread().getName());
System.out.println(this.getName());

区别四

由于Java是单继承,一个类继承Thread类以后不能继承其他类,扩展性不好
而实现Runnable接口则可以侧面实现了多继承

区别五

继承Thread类不能实现线程变量资源共享,注意,是线程里的变量
实现Runnable 接口线程变量是可以共享的,也可以不共享,看创建线程的方式
如图:
继承Thread类:

代码

package threadStudy;public class TestThread {public static void main(String[] args) {new MyThread("a").start();new MyThread("b").start();new MyThread("c").start();}
}class MyThread extends Thread{int count = 10;boolean flag = true;public MyThread(String name) {super(name);}@Overridepublic void run() {while (flag){if(count <=0){flag = false;return;}System.out.println(this.getName()+"==>count==>"+count--);}}
}

实现Runnable接口

代码:

package threadStudy;public class TestRunnable {public static void main(String[] args) {MyRunnable myRunnable = new MyRunnable();new Thread(myRunnable,"a").start();new Thread(myRunnable,"b").start();new Thread(myRunnable,"c").start();//        new Thread(new MyRunnable(),"a").start();
//        new Thread(new MyRunnable(),"b").start();
//        new Thread(new MyRunnable(),"c").start();}
}class MyRunnable implements Runnable{int count = 10;boolean flag = true;@Overridepublic void run() {while(flag){if(count <=0){flag = false;return;}System.out.println(Thread.currentThread().getName()+"==>count==>"+count--);}}
}

如果需要实现资源共享,继承Thread 类和实现Runnable 接口都是可以的,很多人喜欢用买票的例子来说明,把票数这个变量定义在线程里,这样是没有意义的,应该把票数提出来封装成一个实体类,多线程操作一个实体类对象,就可以实现共享

多线程中继承Thread 类和实现Runnable 接口的区别相关推荐

  1. Java中继承thread类与实现Runnable接口的区别

    Java中线程的创建有两种方式: 1.  通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2.  通过实现Runnable接口,实例化Thread类 在实际应用中, ...

  2. JavaSE基础二十:Java 多线程(线程基础知识、Java 多线程、Java 实现多线程(继承 Thread 类、实现 Runnable 接口、实现 Callable 接口))

    本章目录 1.基础知识准备 2.Java 多线程概述 3.Java 实现多线程 3.1.继承 Thread 类 如何开启新线程 Thread 类常用方法 多线程中的同步 Thread 类同步方法 多线 ...

  3. java基础 通过继承Thread类和实现Runnable接口创建线程

    java 创建线程 Java中,线程也是一种对象,但不是任何对象都可以成为线程. 只有实现了Runnable接口或继承了Thread类的对象才能成为线程. 继承Thread类 //格式: class ...

  4. 创建线程的两种方式:继承Thread类和实现Runnable接口

    第一种方式:继承Thread类 步骤:1.定义类继承Thread 2.覆写Threa类的run方法. 自定义代码放在run方法中,让线程运行 3.调用线程的star方法, 该线程有两个作用:启动线程, ...

  5. android 如何extends 多个,Android多线程:继承Thread类 使用解析(含实例教程)

    前言 在Android开发中,多线程的使用十分常见 今天,我将全面解析多线程其中一种常见用法:继承Thread类. 目录 示意图 1. 简介 示意图 2. 使用讲解 2.1 使用步骤 示意图 2.2 ...

  6. 多线程之继承Thread类及多线程内存分析

    *创建多线程的一种方式:继承Thread类 * java.lang.Thread是描述多线程的类,要实现多线程程序,一种方式就是继承Thread类 * 1.创建一个类Mythread让其extends ...

  7. 继承Thread类实现多线程简单实例

    继承Thread类实现多线程简单实例 文章目录 继承Thread类实现多线程简单实例 一.多线程的意义 二.多线程的创建 三.代码 一.多线程的意义 1.为什么要使用多线程 (a)提高用户体验或者避免 ...

  8. java 创建线程thread_初学Java多线程:用Thread类创建线程

    在Java中创建线程有两种方法:使用Thread类和使用Runnable接口.在使用Runnable接口时需要建立一个Thread实例.因此,无论是通过Thread类还是Runnable接口建立线程, ...

  9. 【Java多线程】实现Runnable接口方式 / 继承Thread类方式;使用synchronized锁实现线程安全;线程安全的懒汉式单例模式;死锁问题示例

    Thread 的生命周期 一.实现Runnable接口方式 1.在 run 方法中使用 synchronized 块 /*** 例子:创建三个窗口卖票,总票数为100张.使用实现Runnable接口的 ...

最新文章

  1. 函数的梯度方向和切线方向_高数下微课:11.3_5 二元函数的全微分求积
  2. 从实习被劝退,到收获阿里腾讯的offer,谈谈读研给我带来的转变
  3. Control Compliance Suite,听说过吗?
  4. 学习是一个漫长不能松懈的过程
  5. 学习Kotlin(一)为什么使用Kotlin
  6. c#写数据到Excel慢
  7. [USACO07FEB]银牛派对Silver Cow Party---最短路模板题
  8. 《JavaScript》高级程序设计---第3章
  9. 【Jenkins】Jenkins : jenkins-2.121.1 安装 与 使用
  10. Codeforces 40 E. Number Table
  11. python给生活带来哪些改变_Python - 笔记1
  12. JavaScript我学之七数组
  13. python opencv 鼠标提取矩形(Rectangle)ROI
  14. process 类 java_Process 执行命令行Java封装类详解
  15. gulp教程、gulp-less安装
  16. Arcgis学习笔记(二)投影和定义投影
  17. 国家一级职业资格证书 计算机类有哪些
  18. 腾讯云SOC方案入选CIC工信安全优秀解决方案
  19. MLX90360LGO-ACD-000-RE 可编程位置传感器
  20. 山东大学计算机组成与设计实验二逻辑运算电路

热门文章

  1. 温德尔和穆迪由伦敦最好的理发师!
  2. 2021湖北随州高考成绩查询,湖北随州2021年高考报名人数 多少人报名高考
  3. 如何使用动态SQL语句?
  4. LaTeX技巧010:生成长度固定的下划线
  5. 用Lombok项目减少样板代码(翻译自官方文档)
  6. 前端开发入门提升经验整理
  7. 材料员报考建筑八大员报考建筑材料钢筋和混凝土的特性介绍
  8. C语言文件操作,增删改查
  9. Android 发邮件
  10. JS 上传CSV转JSON | JSON数据转CSV下载 | 数组转CSV