Thread类和Runnable接口的比较
Thread和Runnable的联系
Thread类的定义:
public class Thread extends Object implements Runnable
联系:从Thread类的定义可以看到,Thread类实现了Runnable接口,即可以说Thread是Runnable的子类。
Thread和Runnable的区别
观察以下程序(程序1):
public class MyThread extends Thread{
private int ticket = 5;
public MyThread(String name){
this.setName(name);
}
@Override
public void run() { //线程的操作主题
for (int i = 0; i < 100; i++) {
if(ticket>0){
System.out.println(Thread.currentThread().getName()+"卖出一张:还剩"+ticket--+"张票");
}
}
}
public static void main(String args[]){
MyThread my1 = new MyThread("售票机1"); //实例化对象
MyThread my2 = new MyThread("售票机2"); //实例化对象
my1.start();
my2.start();
}
}

通过继承Thread类实现的多线程操作,两个售票机虽然是并发运行,但结果显然不是我们想要的,两个售票机各自售出各自的五张票,共卖出10张票,但我们只有五张票。
再看实现Runnable接口创建线程(程序2):
public class MyThread implements Runnable{
private int ticket = 5;
@Override
public void run() { //线程的操作主题
for (int i = 0; i < 100; i++) {
if(ticket>0){
System.out.println(Thread.currentThread().getName()+"卖出一张:还剩"+ticket--+"张票");
}
}
}
public static void main(String args[]){
MyThread my1 = new MyThread(); //实例化对象
new Thread(my1,"售票机1").start(); //调用线程主体
new Thread(my1,"售票机2").start(); //调用线程主体
}
}

从运行结果来看,虽然我们启动了两个线程,但是两个线程总共卖出了5张票,所以达到了资源共享。
区别:使用Thread类在操作多线程的时候无法实现资源共享的目的,而使用Runnable接口实现的多线程可以实现资源共享。
总结
实现Runnable接口比继承Thread类的明显优点:
- l 适合多个相同代码的线程去处理同一个资源;
- l 可以避免由于单继承局限所带来的影响;
- l 增强了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。
Thread类和Runnable接口的比较的更多相关文章
- Thread类与Runnable接口的深入理解
Thread类与Runnable接口的深入理解1.Thread类实现了Runnable接口,实现run方法,其中target参数对应的就是一个Runnable接口的实现类 @Override publ ...
- 探Java多线程Thread类和Runnable接口之间的联系
首先复习一下Java多线程实现机制,Java实现多线程方法有如下这么几种: 1.继承了(extends)Thread类 2.实现了(implements)Runnable接口 也就是说 有如下两种情 ...
- 多线程-----Thread类与Runnable接口的区别
第一个继承Thread类来实现多线程,其实是相当于拿出三件事即三个卖早餐10份的任务分别分给三个窗口,他们各做各的事各卖各的早餐各完成各的任务,因为MyThread继承Thread类,所以在newMy ...
- Java多线程和并发(三),Thread类和Runnable接口
目录 1.Thread和Runnable接口 三.Thread类和Runnable接口 1.Thread和Runnable接口
- 使用Thread类和Runnable接口实现多线程的区别
使用Thread类和Runnable接口实现多线程的区别 先看两种实现方式的步骤: public class ThreadDemo{ public static void main(String[] ...
- 多线程, Thread类,Runnable接口
多线程 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程.一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序. 单线程程序:即,若有多个任务只能依次执 ...
- Java 多线程之 Thread 类 和 Runnable 接口初步使用
目录 Thread 类 Thread之定义线程类 Thread之开启线程 Runnable 接口 Runnable 之定义线程类 Runnable 之开启线程 @ Thread 类 Thread 类是 ...
- 多线程----Thread类,Runnable接口,线程池,Callable接口,线程安全
1概念 1.1进程 进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 任务管理器中: 1.2线程 线程是进程中的一个执行单元 ...
- 几种创建线程方式Thread类和Runnable接口
对于很多想学习java的人来说,经常听别人说线程难,其实真正理解了线程后,一点都不会觉得线程难,这里我为大家梳理下线程的创建方式吧. 一.线程的创建方式有三种 1.继承Thread类 2.实现Runn ...
随机推荐
- Zedboard学习(二):zedboard的Linux下交叉编译环境搭建 标签: 交叉编译linuxzedboard 2017-07-04 23:49 19人阅读
环境准备 首先肯定是要下载xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin文件,这是官方提供的linux下交叉编译链安装文件,下载地址为:https://p ...
- Solr开发文档(转)
出处:http://www.cnblogs.com/hoojo/archive/2011/10/21/2220431.html Solr 是一种可供企业使用的.基于 Lucene 的搜索服务器,它支持 ...
- Typora的图片根目录设置,
需求:使Typora的图片,设置到指定的文件里. 方便上传与转移. 步骤: 1 位置: 编辑 ->图片工具->设置图片根目录. 2 .Preference -> Editor -&g ...
- Ubuntu 将应用程序 固定到快快速启动栏(以Sublime为例)
因为Sublime Text并不是需要安装,所以缺少Ubuntu桌面运行的一些基本配置,比如不能将它加入桌面侧边的启动器. 而Ubuntu上也没有快捷方式的说法,而通过软件中心安装的软件就有图标,并能 ...
- 【小梅哥SOPC学习笔记】NIOS II工程目录改变时project无法编译问题
解决NIOS II工程移动在磁盘上位置后project无法编译问题 说明:本文档于2017年3月4日由小梅哥更新部分内容,主要是增加了讲解以Quartus II13.0为代表的经典版本和以15.1为代 ...
- android屏幕适配,生成不同分辨率的dimen.xml文件
一.在项目下新建moudle,选择Java Library 二.DimenUtils类 public class DimenUtils { //文件保存的路径 是在该项目下根路径下创建 比如该项目创建 ...
- Exception has been thrown by the target of an invocation
I'd suggest checking for an inner exception. If there isn't one, check your logs for the exception t ...
- C语言编程学习:写的秒速计算四则混合运算项目
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- c#设计模式系列:状态模式(State pattern)
引言 我们在编程的时候,有时候会遇到,一个对象的行为动作会由对象的状态来决定的,也就是对象的行为是由状态来决定,如果对象的状态很多,那么也会由很多不同的行为,这时候我们一班会 if –else if- ...
- .net Timer定时执行
System.Timers.Timer可以实现数据库定时更新的功能 Global.asax void Application_Start(object sender, EventArgs e) { / ...