多线程两种实现方式的区别
2012-08-01 15:58
323 查看
我们知道实现多线程有两种方式:继承Thread类和实现Runnable接口。
那么这两种方式有什么区别呢?用哪个会更好点呢?
显然,因为java的单继承特性,如果用继承Thread类的方式来实现多线程的话,此线程类就不能继承其他的类了。所以在程序中往往要求用实现Runnable的方式来开发会更好。但这并非我们放弃用继承Thread类的最大原因。
这两种方式最大的区别是在资源共享的问题,继承Thread类的多个线程之间不能实现资源的共享,而实现Runnable接口后可以实现多个线程之间的资源共享。
来看一下下面的这个例子就会明白了:
某歌手到某高校开演唱会,高校作为主办方出售10张票,分三个点售卖,这就相当于分成三个线程去完成售卖门票这件事。一共是卖出10张,直到买完所有票为止。下面通过多线程的两种方式来看是否可以实现买票这件事:
首先来看继承Thread类的实现:
![](http://img1.51cto.com/attachment/201208/155255198.png)
再看看结果:
![](http://img1.51cto.com/attachment/201208/155327767.png)
从输出结果:发现每个售卖点都卖出了10张票,这样一来三个点共卖出了30张票,但一共才10张票。这显然没有达到资源共享的要求,未能实现三个点共同卖票的要求。
我们再来试试Runnable的实现方式:
![](http://img1.51cto.com/attachment/201208/155444145.png)
输出结果为:
![](http://img1.51cto.com/attachment/201208/155623504.png)
从结果可以看出,实现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
那么这两种方式有什么区别呢?用哪个会更好点呢?
显然,因为java的单继承特性,如果用继承Thread类的方式来实现多线程的话,此线程类就不能继承其他的类了。所以在程序中往往要求用实现Runnable的方式来开发会更好。但这并非我们放弃用继承Thread类的最大原因。
这两种方式最大的区别是在资源共享的问题,继承Thread类的多个线程之间不能实现资源的共享,而实现Runnable接口后可以实现多个线程之间的资源共享。
来看一下下面的这个例子就会明白了:
某歌手到某高校开演唱会,高校作为主办方出售10张票,分三个点售卖,这就相当于分成三个线程去完成售卖门票这件事。一共是卖出10张,直到买完所有票为止。下面通过多线程的两种方式来看是否可以实现买票这件事:
首先来看继承Thread类的实现:
![](http://img1.51cto.com/attachment/201208/155255198.png)
再看看结果:
![](http://img1.51cto.com/attachment/201208/155327767.png)
从输出结果:发现每个售卖点都卖出了10张票,这样一来三个点共卖出了30张票,但一共才10张票。这显然没有达到资源共享的要求,未能实现三个点共同卖票的要求。
我们再来试试Runnable的实现方式:
![](http://img1.51cto.com/attachment/201208/155444145.png)
输出结果为:
![](http://img1.51cto.com/attachment/201208/155623504.png)
从结果可以看出,实现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
相关文章推荐
- Java中两种多线程实现方式的区别
- Java中有两种实现多线程的方式以及两种方式之间的区别
- Java中实现多线程的两种方式之间的区别
- Java中有两种实现多线程的方式以及两种方式之间的区别
- Java中有两种实现多线程的方式以及两种方式之间的区别
- Java中实现多线程的两种方式之间的区别
- Java中有两种实现多线程的方式以及两种方式之间的区别
- java多线程实现(thread和runnable接口两种方式以及其区别)
- Java中有两种实现多线程的方式以及两种方式之间的区别
- 多线程的两种实现方式和区别?
- Java中有两种实现多线程的方式以及两种方式之间的区别
- 有两种实现多线程的方式以及两种方式之间的区别
- 两种方式实现多线程区别
- Java中有两种实现多线程的方式的区别
- Java中有两种实现多线程的方式以及两种方式之间的区别
- Java中有两种实现多线程的方式以及两种方式之间的区别
- Java中有两种实现多线程的方式以及两种方式之间的区别
- 实现多线程的两种方式,区别和好处有哪些
- Java中有两种实现多线程的方式以及两种方式之间的区别
- Java中实现多线程的两种方式之间的区别