第9章 多线程2-7965_2266_20101115120423.pptVIP

  1. 1、本文档共47页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
如何选择创建方式? 建议:实现Runnable接口 1) 符合面向对象的设计原则。接口的功能就是让实现它的类附上特定的功能,但不会改变类原来的继承框架。 2) Java类是单根继承结构。如果继承了Thread类,就无法再继承别的类。例如Java applet必须继承Applet类,因此只能通过实现Runnable接口来附加线程的功能。 3) 程序的一致性设计原则。 缺点:实现起来比直接继承Thread类要复杂一些。 注意: (1) wait()、 notify()和notifyAll()都是Object类中的方法,而不是Thread类中的方法。 (2)wait()、 notify()和notifyAll()方法只能在锁定(用synchronized修饰)的程序或语句块中使用,否则会产生编译异常。 (3)一开始没有产品,当线程(Consumer)调用对象(Stack)的wait()方法时,就把这个线程加到该对象的等待线程队列中。当另一个线程(Produce)生产产品后,就调用同一对象(Stack)的notify()方法时,对象会唤醒其等待线程队列中的一个线程(Consumer) ,允许它继续运行。 Java的线程调度并不是严格按照优先级顺序的,他只是保证优先级高的线程得到时间片的机会更大一些。 实际编程时,不建议使用线程的优先级来确保算法的正确执行。要编写正确、跨平台的多线程代码,必须假设线程在任何时刻都有可能被剥夺CPU资源的使用权。 在Java平台中,创建一个线程非常简单,最直接的方法就是从线程类java.lang.Thread继承。在缺省情况下,线程类可以被所有的Java应用程序调用 JDK5.0之前 * 在Java平台中,创建一个线程非常简单,最直接的方法就是从线程类java.lang.Thread继承。在缺省情况下,线程类可以被所有的Java应用程序调用 1 class Stack {//保存资源的缓冲区 2 private int index = 0; 3 private Goods[] buffer = new Goods[5]; 4 public synchronized void put(Goods goods) { while(index == buffer.length) {//缓冲区满 System.out.println(index); 7 try { 8 this.wait();//暂不生产,等待 9 } catch (InterruptedException e) {} 10 } 11 buffer[index] = goods; 12 index++; 13 this.notify();//已生产,可以消费了 14 } 15 public synchronized Goods get() { 16 while(index == 0) {//缓冲区空 17 try { 18 this.wait(); //没有资源,等待 19 } catch (InterruptedException e) { } 20 } 21 index--; //资源个数减1 22 this.notify();//缓冲区有空间,生产者可以生产了 23 return buffer[index]; 24 } 25 } 1 class Producer implements Runnable {//生产者线程 2 private Stack s = null; 3 public Producer(Stack s) { this.s = s; } 4 Random random = new 5 Random(System.currentTimeMillis()); 6 public void run() { 7 for(;;) { Goods goodID = new Goods(random.nextInt(100)); s.put(goodID); //生产资源 10 System.out.println(生产: + goodID); 11 try {

文档评论(0)

精华文档888 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档