- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
9.2.3 两种多线程实现机制的比较 由9.2.1节和9.2.2节可以看出,不管实现了Runnable接口还是继承了Thread类其结果都是一样的,那么这两者之间有什么关系呢?读者可以通过查看JDK文档发现二者之间的联系,如图9-2所示。 图9-2 Thread 类与Runnable接口的关系 从图9-2中可以看出,Thread类实现了Runnable接口。也就是说,Thread类也是Runnable接口的一个子类。那么两者之间除了这些联系之外还有什么区别呢?下面通过编写一个应用程序来进行比较分析。下面程序是一个模拟铁路售票系统的范例,实现四个售票点发售某日某次列车的车票20张,一个售票点用一个线程来表示。 【例9-4】 ThreadDemo9_3.java。 下例由ThreadDemo9_3的程序修改而成,这里让main()方法中产生四个线程。 【例9-5】 修改后的ThreadDemo9_3.java。 由于程序的输出结果过长,所以只截取了后面一部分,但从这部分输出结果中可以看出,这里启动了四个线程对象,这四个线程对象各自占有各自的资源,所以可以得出结论:用Thread类实际上无法达到资源共享的目的。 那么实现Runnable接口会如何呢?下面这个例子也修改自ThreadDemo9_3,读者可以观察一下输出结果。 【例9-6】 ThreadDemo9_4.java。 从上面的程序中可以看出,第7行到第10行启动了四个线程,从程序的输出结果来看,尽管启动了四个线程对象,但是结果都操纵了同一个资源,实现了资源共享的目的。 可见,实现Runnable接口相对于继承Thread类来说具有如下显著优势: (1) 适合多个相同程序代码的线程去处理同一资源的情况,把虚拟CPU(线程)同程序的代码、数据有效分离,较好地体现了面向对象的设计思想。 (2) 可以避免由于Java的单继承特性带来的局限。开发中经常碰到这样一种情况,即:当要将已经继承了某一个类的子类放入多线程中时,由于一个类不能同时有两个父类,所以不能用继承Thread类的方式,那么就只能采用实现Runnable接口的方式。 (3) 增强了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。当多个线程的执行代码来自同一个类的实例时,称它们共享相同的代码。多个线程可以操作相同的数据,与它们的代码无关。当共享访问相同的对象时,共享相同的数据。当线程被构造时,需要的代码和数据通过一个对象作为构造函数实参传递进去,这个对象就是一个实现了Runnable接口的类的实例。 事实上,几乎所有多线程应用都可用第二种方式,即实现Runnable接口。
您可能关注的文档
- 2015金属结构设计(华科版)课件:绪论(用) .ppt
- 2015金属融化焊基础(机工版)课件:工程结构用钢.ppt
- 2015金属融化焊基础(机工版)课件:有害元素对焊缝金属的作用及其控制.ppt
- 2015金属融化焊基础(机工版)课件:淬火与回火.ppt
- 2015金属融化焊基础(机工版)课件:焊 剂.ppt
- 2015金属工艺学(冶金版)课件:金属液态成形(铸造)的概念.ppt
- 2015金属融化焊基础(机工版)课件:焊接热影响区.ppt
- 2015金属融化焊基础(机工版)课件:焊接热过程.ppt
- 2015金属融化焊基础(机工版)课件:焊条.ppt
- 2015金属融化焊基础(机工版)课件:焊缝金属的构成.ppt
文档评论(0)