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 ...
随机推荐
- 熟悉相关电路,控制I/O口,且配置相关参数,LED,光敏,74LS164数码管
1.掌握zigbee无线模块的基本工作电路. 2.上面芯片跟仿真器连接需要5根线,电源.地.复位.P2_1.P2_2. 输出的配置:a.首先要让相应IO口处于普通IO口模式,非片上外设的模式:b.让普 ...
- 反射机制:获取class的方法
- [GO]文件的收发服务器
发送方 package main import ( "fmt" "os" "net" "io" ) //发送文件内容 f ...
- /var/run/yum.pid被锁定
当执行yum update时出现: /var/run/yum.pid已被锁定,PID为1610的另一个程序正在运行. 另外一个程序锁定了yum:等待它退出...... 解决办法 rm -f /var/ ...
- QT学习之多线程
[为什么要用多线程?] 传统的图形用户界面应用程序都只有一个执行线程,并且一次只执行一个操作.如果用户从用户界面中调用一个比较耗时的操作,当该操作正在执行时,用户界面通常会冻结而不再响应.这个问题可以 ...
- C/C++语言中的函数参数传参三种对比
学了很长时间C/C++有时指针方面还是有点乱. 希望大神发现如果下面有不对的地方请指出.我发现之所以我乱就是因为中文表述不准确的问题,比如 ,地址值和地址 #include <iostream& ...
- APUE(7)---进程环境
一.main函数 C程序总是从main函数开始执行.main函数的原型是: int main(int argv, char *argv[]); 当内核执行C程序时,在调用main前先调用一个特殊的启动 ...
- APUE(5)---标准I/O库 (1)
一.引言 标准I/O库不仅是UNIX,许多i其他操作系统都实现了标准I/O库,所以这个库由ISO C标准说明.标准I/O库处理很多细节,如缓冲区分配,以及优化的块长度执行I/O等.这使得它便于用户使用 ...
- Mac上修改MySQL默认字符集为utf8
1.检查默认安装的mysql的字符集 mysql> show variables like '%char%'; +--------------------------+------------- ...
- 安装Python-Windows
安装Python-Windows 在开始Python编程前,需要先安装Python环境.Python安装包可以到Python的官网下载,官网地址是https://www.python.org/,如果想 ...