多线程中继承Thread 类和实现Runnable 接口的区别
网上看了很多多线程里继承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 接口的区别相关推荐
- Java中继承thread类与实现Runnable接口的区别
Java中线程的创建有两种方式: 1. 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2. 通过实现Runnable接口,实例化Thread类 在实际应用中, ...
- JavaSE基础二十:Java 多线程(线程基础知识、Java 多线程、Java 实现多线程(继承 Thread 类、实现 Runnable 接口、实现 Callable 接口))
本章目录 1.基础知识准备 2.Java 多线程概述 3.Java 实现多线程 3.1.继承 Thread 类 如何开启新线程 Thread 类常用方法 多线程中的同步 Thread 类同步方法 多线 ...
- java基础 通过继承Thread类和实现Runnable接口创建线程
java 创建线程 Java中,线程也是一种对象,但不是任何对象都可以成为线程. 只有实现了Runnable接口或继承了Thread类的对象才能成为线程. 继承Thread类 //格式: class ...
- 创建线程的两种方式:继承Thread类和实现Runnable接口
第一种方式:继承Thread类 步骤:1.定义类继承Thread 2.覆写Threa类的run方法. 自定义代码放在run方法中,让线程运行 3.调用线程的star方法, 该线程有两个作用:启动线程, ...
- android 如何extends 多个,Android多线程:继承Thread类 使用解析(含实例教程)
前言 在Android开发中,多线程的使用十分常见 今天,我将全面解析多线程其中一种常见用法:继承Thread类. 目录 示意图 1. 简介 示意图 2. 使用讲解 2.1 使用步骤 示意图 2.2 ...
- 多线程之继承Thread类及多线程内存分析
*创建多线程的一种方式:继承Thread类 * java.lang.Thread是描述多线程的类,要实现多线程程序,一种方式就是继承Thread类 * 1.创建一个类Mythread让其extends ...
- 继承Thread类实现多线程简单实例
继承Thread类实现多线程简单实例 文章目录 继承Thread类实现多线程简单实例 一.多线程的意义 二.多线程的创建 三.代码 一.多线程的意义 1.为什么要使用多线程 (a)提高用户体验或者避免 ...
- java 创建线程thread_初学Java多线程:用Thread类创建线程
在Java中创建线程有两种方法:使用Thread类和使用Runnable接口.在使用Runnable接口时需要建立一个Thread实例.因此,无论是通过Thread类还是Runnable接口建立线程, ...
- 【Java多线程】实现Runnable接口方式 / 继承Thread类方式;使用synchronized锁实现线程安全;线程安全的懒汉式单例模式;死锁问题示例
Thread 的生命周期 一.实现Runnable接口方式 1.在 run 方法中使用 synchronized 块 /*** 例子:创建三个窗口卖票,总票数为100张.使用实现Runnable接口的 ...
最新文章
- 函数的梯度方向和切线方向_高数下微课:11.3_5 二元函数的全微分求积
- 从实习被劝退,到收获阿里腾讯的offer,谈谈读研给我带来的转变
- Control Compliance Suite,听说过吗?
- 学习是一个漫长不能松懈的过程
- 学习Kotlin(一)为什么使用Kotlin
- c#写数据到Excel慢
- [USACO07FEB]银牛派对Silver Cow Party---最短路模板题
- 《JavaScript》高级程序设计---第3章
- 【Jenkins】Jenkins : jenkins-2.121.1 安装 与 使用
- Codeforces 40 E. Number Table
- python给生活带来哪些改变_Python - 笔记1
- JavaScript我学之七数组
- python opencv 鼠标提取矩形(Rectangle)ROI
- process 类 java_Process 执行命令行Java封装类详解
- gulp教程、gulp-less安装
- Arcgis学习笔记(二)投影和定义投影
- 国家一级职业资格证书 计算机类有哪些
- 腾讯云SOC方案入选CIC工信安全优秀解决方案
- MLX90360LGO-ACD-000-RE 可编程位置传感器
- 山东大学计算机组成与设计实验二逻辑运算电路