[转]java中Thread与Runnable的区别

来源:互联网 发布:免费下载视频剪辑软件 编辑:程序博客网 时间:2024/05/22 17:45

在java中可有两种方式实现多线程,一种是继承thread类,一种是实现runnable接口;thread类是在java.lang包中定义的。一个类只要继承了thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限,下面看例子:

package org.thread.demo;

class mythread extends thread{

private string name;

public mythread(string name) {

super();

this.name = name;

}

public void run(){

for(int i=0;i避免点继承的局限,一个类可以继承多个接口。

->适合于资源的共享

以卖票程序为例,通过thread类完成:

package org.demo.dff;

class mythread extends thread{

private int ticket=10;

public void run(){

for(int i=0;i0){

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;i0){

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

发现thread类也是runnable接口的子类。


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
原创粉丝点击