多线程新特性.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
多线程新特性

在Java 5.0之前Java里的多线程编程主要是通过Thread类,Runnable接口,Object对象中的wait()、 notify()、 notifyAll()等方法和synchronized关键词来实现的。这些工具虽然能在大多数情况下解决对共享资源的管理和线程间的调度,但存在以下几个问题 1.????? 过于原始,拿来就能用的功能有限,即使是要实现简单的多线程功能也需要编写大量的代码。这些工具就像汇编语言一样难以学习和使用,比这更糟糕的是稍有不慎它们还可能被错误地使用,而且这样的错误很难被发现。 2.????? 如果使用不当,会使程序的运行效率大大降低。 3.????? 为了提高开发效率,简化编程,开发人员在做项目的时候往往需要写一些共享的工具来实现一些普遍适用的功能。但因为没有规范,相同的工具会被重复地开发,造成资源浪费。 4.????? 因为锁定的功能是通过Synchronized来实现的,这是一种块结构,只能对代码中的一段代码进行锁定,而且锁定是单一的。如以下代码所示: synchronized(lock){ ??? //执行对共享资源的操作 ??? …… } ??? ?一些复杂的功能就很难被实现。比如说如果程序需要取得lock A和lock B来进行操作1,然后需要取得lock C并且释放lock A来进行操作2,Java 5.0之前的多线程框架就显得无能为力了。 ?? 因为这些问题,程序员对旧的框架一直颇有微词。这种情况一直到Java 5.0才有较大的改观,一系列的多线程工具包被纳入了标准库文件。这些工具包括了一个新的多线程程序的执行框架,使编程人员可方便地协调和调度线程的运行,并且新加入了一些高性能的常用的工具,使程序更容易编写,运行效率更高。本文将分类并结合例子来介绍这些新加的多线程工具。 ?? 在我们开始介绍Java 5.0里的新Concurrent工具前让我们先来看一下一个用旧的多线程工具编写的程序,这个程序里有一个Server线程,它需要启动两个 Component,Server线程需等到Component线程完毕后再继续。相同的功能在Synchronizer一章里用新加的工具 CountDownLatch有相同的实现。两个程序,孰优孰劣,哪个程序更容易编写,哪个程序更容易理解,相信大家看过之后不难得出结论。 public class ServerThread { ????? Object concLock = new Object(); ????? int count = 2; public void runTwoThreads() { ????? //启动两个线程去初始化组件 ??????????? new Thread(new ComponentThread1(this)).start(); ??????????? new Thread(new ComponentThread1(this)).start(); ??????????? // Wait for other thread while(count != 0) { ????????????????? synchronized(concLock) { ??????????????????????? try { ????????????????????????????? concLock.wait(); ????????????????????????????? System.out.println(Wake up.); ??????????????????????? } catch (InterruptedException ie) { //处理异常} ????????????????? } ??????????? } ??????????? System.out.println(Server is up.); ????? } ????? public void callBack() { synchronized(concLock) { ????????????????? count--; ????????????????? concLock.notifyAll(); ??????????? } ????? } ????? public static void main(String[] args){ ??????????? ServerThread server = new ServerThread(); ??????????? server.runTwoThreads(); ????? } } ? public class ComponentThread1 implements Runnable { ????? private

文档评论(0)

jjkk585 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档