实现多线程的两种方式,区别和好处有哪些
来源:互联网 发布:国际阿里云服务器购买 编辑:程序博客网 时间:2024/04/28 19:59
一种是扩展java.lang.Thread类
另一种是实现java.lang.Runnable接口
区别就是:第一种是扩展,第二种是实现
好处就是:
在实际开发中通常以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类可以避免继承的局限,一个类可以继承多个接口,适合于资源的共享。
以卖票程序为例,通过Thread类完成:
package org.demo.dff;
class MyThread extends Thread{
private int ticket=10;
public void run(){
for(int i=0;i<20;i++){
if(this.ticket>0){
System.out.println("賣票:ticket"+this.ticket--);
}
}
}
};
下面通过三个线程对象,同时卖票:
package org.demo.dff;
public class ThreadTicket {
public static void main(String[] args) {
MyThread mt1=new MyThread();
MyThread mt2=new MyThread();
MyThread mt3=new MyThread();
mt1.start();//每个线程都各卖了10张,共卖了30张票
mt2.start();//但实际只有10张票,每个线程都卖自己的票
mt3.start();//没有达到资源共享
}
}
如果用Runnable就可以实现资源共享,下面看例子:
package org.demo.runnable;
class MyThread implements Runnable{
private int ticket=10;
public void run(){
for(int i=0;i<20;i++){
if(this.ticket>0){
System.out.println("賣票:ticket"+this.ticket--);
}
}
}
}
package org.demo.runnable;
public class RunnableTicket {
public static void main(String[] args) {
MyThread mt=new MyThread();
new Thread(mt).start();//同一个mt,但是在Thread中就不可以,如果用同一
new Thread(mt).start();//个实例化对象mt,就会出现异常
new Thread(mt).start();
}
};
虽然现在程序中有三个线程,但是一共卖了10张票,也就是说使用Runnable实现多线程可以达到资源共享目的。
Runnable接口和Thread之间的联系:
public class Thread extends Object implements Runnable
1)适合多个相同程序代码的线程去处理同一资源的情况,把虚拟CPU(线程)同程序的代码,数据有效的分离,较好地体现了面向对象的设计思想。
(2)可以避免由于Java的单继承特性带来的局限。我们经常碰到这样一种情况,即当我们要将已经继承了某一个类的子类放入多线程中,由于一个类不能同时有两个父类,所以不能用继承Thread类的方式,那么,这个类就只能采用实现Runnable接口的方式了。
(3)有利于程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。当多个线程的执行代码来自同一个类的实例时,即称它们共享相同的代码。多个线程操作相同的数据,与它们的代码无关。当共享访问相同的对象是,即它们共享相同的数据。当线程被构造时,需要的代码和数据通过一个对象作为构造函数实参传递进去,这个对象就是一个实现了Runnable接口的类的实例。
- 实现多线程的两种方式,区别和好处有哪些
- 多线程的两种实现方式和区别?
- 两种实现多线程的方法有什么区别
- Java基础--多线程的两种实现方式及区别
- 多线程实现的两种方式及其区别
- 两种方式实现多线程区别
- 多线程的创建两种方式和区别
- 什么是接口?接口有哪些好处,抽象类(abstract)和接口(interface)的区别
- 引导方式有哪些?LILO和GRUB的区别是什么?
- SaaS的好处有哪些?
- Java中有两种实现多线程的方式以及两种方式之间的区别
- Java中有两种实现多线程的方式以及两种方式之间的区别
- Java中有两种实现多线程的方式以及两种方式之间的区别
- 有两种实现多线程的方式以及两种方式之间的区别
- Java中有两种实现多线程的方式以及两种方式之间的区别
- Java中有两种实现多线程的方式以及两种方式之间的区别
- Java中有两种实现多线程的方式以及两种方式之间的区别
- Java中有两种实现多线程的方式以及两种方式之间的区别
- Objective-C 编程语言(1) 简介
- 汇编20111109
- STL容器学习总结
- 信号完整性与电源完整性分析基本概念
- 详解 Android 的 Activity 组件
- 实现多线程的两种方式,区别和好处有哪些
- Java那些事:Java 7、JavaFX 2.0以及Vaadin框架(重点在JavaFX)
- SortList非泛型和泛型遍历输出形式
- [转]java回调机制
- 如果你大学什么都没学,请点击进入会有所帮助。
- OpenFileDialoge的问题
- 黑马程序员:反射技术
- linux disk command
- Linux设备模型<一>认识Sysfs