实现Runnable和继承Thread的区别
啥都先不说,运行两段程序看看结果再分析
实现Runnable接口的程序代码
public class ThreadTest1 implements Runnable {
private int num = 10;
@Override
public void run() {
for (int i = 0; i <= 100; i++) {
if (num > 0) {
System.out.println(Thread.currentThread().getName()+"执行结果:" + (num--));
}
}
}
public static void main(String[] args) {
ThreadTest1 t1 = new ThreadTest1();
Thread t01 = new Thread(t1, "线程1");
Thread t02 = new Thread(t1, "线程2");
Thread t03 = new Thread(t1, "线程3");
t01.start();
t02.start();
t03.start();
}
}
运行结果:
线程2执行结果:
线程3执行结果:
线程3执行结果:
线程1执行结果:
线程3执行结果:
线程2执行结果:
线程3执行结果:
线程3执行结果:
线程1执行结果:
线程2执行结果:
继承Thread类的实现代码
public class ThreadTest2 extends Thread{
private int num = 10;
@Override
public void run() {
for(int i =0; i <=100; i++) {
if(num >0) {
System.out.println(Thread.currentThread().getName()+"执行结果:"+(num--));
}
}
}
public static void main(String[] args) {
ThreadTest2 t01 = new ThreadTest2();
ThreadTest2 t02 = new ThreadTest2();
ThreadTest2 t03 = new ThreadTest2();
t01.start();
t02.start();
t03.start();
}
}
运行结果:
Thread-0执行结果:
Thread-0执行结果:
Thread-0执行结果:
Thread-0执行结果:
Thread-0执行结果:
Thread-0执行结果:
Thread-0执行结果:
Thread-0执行结果:
Thread-0执行结果:
Thread-0执行结果:
Thread-1执行结果:
Thread-1执行结果:
Thread-1执行结果:
Thread-1执行结果:
Thread-1执行结果:
Thread-1执行结果:
Thread-1执行结果:
Thread-1执行结果:
Thread-2执行结果:
Thread-2执行结果:
Thread-2执行结果:
Thread-1执行结果:
Thread-2执行结果:
Thread-1执行结果:
Thread-2执行结果:
Thread-2执行结果:
Thread-2执行结果:
Thread-2执行结果:
Thread-2执行结果:
Thread-2执行结果:
从上面的运行结果可以看出,两者的区别。
实现Runnable接口的,对于三个线程来说共享的是ThreadTest1对象的资源。
继承Thread类,三个线程都是独立的运行,线程间不共享资源。
所以可以总结出以下区别:
1.Runnable接口的话,可以避免单继承的局限性,具有较强的健壮性。
2.Runnable可以实现资源的共享,同时处理同一资源。
3.Thread类的线程间都是独立运行的,资源不共享。
4.继承Thread类不再被其他类继承(java不存在多继承)
实现Runnable和继承Thread的区别的更多相关文章
- Java 多线程实现接口Runnable和继承Thread区别(转)
Java 多线程实现接口Runnable和继承Thread区别 Java中有两种实现多线程的方式.一是直接继承Thread类,二是实现Runnable接口.那么这两种实现多线程的方式在应用上有什么区别 ...
- 实现Runnable接口和继承Thread类区别
如果一个类继承Thread,则不适合资源共享.但是如果实现了Runable接口的话,则很容易的实现资源共享. 实现Runnable接口比继承Thread类所具有的优势: 1):适合多个相同的程序代码的 ...
- (转)多线程——继承Thread 类和实现Runnable 接口的区别
java中我们想要实现多线程常用的有两种方法,继承Thread 类和实现Runnable 接口,有经验的程序员都会选择实现Runnable接口 ,其主要原因有以下两点: 首先,java只能单继承,因此 ...
- java中的线程问题(三)——继承Thread VS 实现Runnable的区别
从java的设计来看,通过继承Thread或者实现Runnable接口来创建线程本质上没有区别,从jdk帮助文档我们可以看到Thread类本身就实现了Runnable接口,如果一定要说它们有什么区别, ...
- 【多线程学习(2)】继承Thread类和实现Runnable接口、Callable接口的区别
1)Runnable和Callable同是接口 * Callable的任务执行后可返回值,而Runnable的任务是不能返回值(是void);call方法可以抛出异常,run方法不可以 * 运行Cal ...
- 多线程——Java中继承Thread类与实现Runnable接口的区别
线程我只写过继承Thread类的,后来知道java多线程有三种方式,今天首先比较一下常用的继承Thread类和实现Runnable接口的区别. 按着Ctrl键进入Thread之后,发现Thread类也 ...
- 多线程——继承Thread 类和实现Runnable 接口的区别
java中我们想要实现多线程常用的有两种方法,继承Thread 类和实现Runnable 接口,有经验的程序员都会选择实现Runnable接口 ,其主要原因有以下两点: 首先,java只能单继承,因此 ...
- java 多线程 继承Thread和实现Runnable的区别
1)继承Thread: public class ThreadTest extends Thread { private int count; private String name; public ...
- Java中继承thread类与实现Runnable接口的区别
Java中线程的创建有两种方式: 1. 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2. 通过实现Runnable接口,实例化Thread类 在实际应用中, ...
随机推荐
- sql中的连接表达式,视图,事务等。
给定两张表 表A ),description )); ,'N1','AD1'); ,'N2','AD2'); mysql> SELECT * FROM a; +----+------+----- ...
- 新建虚拟机与本机ping不通(一招解决)
初始新建虚拟机或者复制虚拟机后,发现虚拟机能ping通内外网,但是本机无法ping通虚拟机,xshell也无法连接虚拟机 这时候就很头疼了,因为要上传很多文件到虚拟机上面 解决办法: 1.关闭虚拟机后 ...
- C++学习笔记--友元
C++控制对类对象私有部分的访问,在外部无法直接访问类的私有或保护成员.通常,公有类方法提供唯一的访问途径.有时这种限制太严格,不适合特定的编程问题.所以C++提供了友元这种形式,通过让函数或类成为类 ...
- python xpath 中的全部用法
不好意思 ,太仓促只能给你们个url 链接:https://blog.csdn.net/hhtnan/article/details/77509549
- atheros无线驱动之:数据接收流程
1:数据处理函数tasklet,workqueue在之前的初始化代码中的函数__ath_attach()中,有如下的代码: #ifndef ATH_SUPPORT_HTC#ifdef ADF_SUPP ...
- sparkSQL——DataFrame&Datasets
对于新司机,可能看到sc与spark不知道是什么,看图知意 ********************************************************************** ...
- js中获取时间戳
function conver(){ var date = new Date(); var year = date.getFullYear() var month=date.getMonth()+1; ...
- 前端使用html2canvas截图,在canvas上绘制图片及保存图片
1.使用html2canvas 存在的问题: 不同的机型绘制位置不同的问题. 这个主要因为Html动态设置了html的dpr.(dpr可以解决屏幕显示不了1pxborder和无法显示小于12px的文字 ...
- 如何用纯 CSS 创作一个跳动的字母 i
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/pZbrpJ 可交互视频 ...
- python error: curl: (1) Protocol "'https" not supported or disabled in libcurl
python 调用curl访问一个网页时,出现error: curl: (1) Protocol "'https" not supported or disabled in lib ...