实现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类 在实际应用中, ...
随机推荐
- 【Android】自己定义相机的实现(支持连续拍照、前后摄像头切换、连续对焦)
~转载请注明http://blog.csdn.net/u013015161/article/details/46921257 介绍 这几天.写了一个自己定义照相机的demo.支持连续拍照和摄像头切换. ...
- solr 查询
1.常用查询参数说明 q - 查询字符串,必须的. fl - 指定返回那些字段内容,用逗号或空格分隔多个. start - 返回第一条记录在完整找到结果中的偏移位置,0开始,一般分页用. rows - ...
- 配置stun服务器实现穿墙
Turn服务器的配置流程 Webrtc是基于P2P的,在两个客户端建立连接之前需要服务器建立连接,这时两台设备一般都处于一个或者多个NAT中,那么两台设备建立连接就需要穿墙技术. 这时就用到了turn ...
- django URL的补充 默认值 传多个参数
url 后面还可以加上默认值 默认值 url(r'^index/', views.index, {'name': 'root'}), urls.py url对应关系 from django.conf. ...
- mysql不乱码的思想总结
不乱码的思想:中文环境下建议选择utf-8 1.linux服务器端的设置: 1 [root@localhost app]# cat /etc/sysconfig/i18n 2 LANG="e ...
- python全栈开发从入门到放弃之函数进阶
1.三元运算 a= 1 b=2 max = (a if a>b else b ) #条件成立的结果 if 条件 else 条件不成立的结果 print(max) 2.先上一首python之禅 i ...
- 一步一步学EF系列一【最简单的一个实例】
整个文章我都会用最简单,最容易让人理解的方式给大家分享和共同学习.(由于live Writer不靠谱 又得补发一篇) 一.安装 Install-Package EntityFramework 二.简单 ...
- java使用freemarker 生成word文档
java 生成word文档 最近需要做一个导出word的功能, 在网上搜了下, 有用POI,JXL,iText等jar生成一个word文件然后将数据写到该文件中,API非常繁琐而且拼出来的 ...
- 架构私用Nuget服务器
1.新建一个空的asp.net站点 2.通过nuget引用 Nuget.Server程序集,引用后项目会多出一些文件.修改web.config 里的apikey为你要上传包时用的apikey,我的为: ...
- Http:UTF-8与GB2312之间的关系
UTF-8里包括GB2312.UTF-8是国际通用的标准(包括世界所有的语言),而GB2312(只是简体中文)只适合做中文的网站.假设你想做个中文网页,但是还可以翻成英文的话,就得用UTF-8.如果用 ...