您的位置:首页 > 其它

多线程两种实现方式的区别

2012-08-01 15:58 323 查看
我们知道实现多线程有两种方式:继承Thread类和实现Runnable接口。

那么这两种方式有什么区别呢?用哪个会更好点呢?
显然,因为java的单继承特性,如果用继承Thread类的方式来实现多线程的话,此线程类就不能继承其他的类了。所以在程序中往往要求用实现Runnable的方式来开发会更好。但这并非我们放弃用继承Thread类的最大原因。
这两种方式最大的区别是在资源共享的问题,继承Thread类的多个线程之间不能实现资源的共享,而实现Runnable接口后可以实现多个线程之间的资源共享。
来看一下下面的这个例子就会明白了:
某歌手到某高校开演唱会,高校作为主办方出售10张票,分三个点售卖,这就相当于分成三个线程去完成售卖门票这件事。一共是卖出10张,直到买完所有票为止。下面通过多线程的两种方式来看是否可以实现买票这件事:
首先来看继承Thread类的实现:





再看看结果:





从输出结果:发现每个售卖点都卖出了10张票,这样一来三个点共卖出了30张票,但一共才10张票。这显然没有达到资源共享的要求,未能实现三个点共同卖票的要求。

我们再来试试Runnable的实现方式:





输出结果为:





从结果可以看出,实现Runnable的方式可以资源共享,即实现了三个点同时买票。

通过分析代码可以看出实现Thread类的方式每新创建一个Thread类就会分配一个资源,所以不能共享,而实现Runnable的方式,把资源放在Runnable的实现类里面,然后通过三个Thread类去启动它,资源只是存在于Runnable的实现类中,供三个启动Thread类实例去调用,所以实现了共享。这就是这两种方式实现多线程的最大区别。

关于提到的为什么要用多线程?推荐大家去看一篇博文:

http://blog.sina.com.cn/s/blog_78edf5db0100wv8v.html

本文出自 “uploadita” 博客,请务必保留此出处http://uploadita.blog.51cto.com/5214180/950204
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: