第7章多线程编程剖析.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章多线程编程剖析

class ProducerThread extends Thread { long sum = 0; ProducerThread() { start(); } public void run() { synchronized (this) { for (int i = 0; i 1000; i++) sum += i; System.out.println(生产者产生完毕数据:sum= + sum); notify(); } }// run synchronized public long getSum() { try { wait(); } catch (InterruptedException ex) { ex.printStackTrace(); } return sum; } } 7.4多线程技术 7.4多线程技术 7.4.3 死锁 死锁是指线程间因互相等待对方的资源,而不能继续执行的情况。Java语言中未处理好同步问题,关键字synchronized使用不当就会导致死锁。一般来说,持有一个共享资源的锁并试图获取另一个时,就有可能发生死锁。 造成死锁问题的本质是无序使用造成的,在程序设计时应理清访问资源的顺序,确保每个线程获取资源和释放资源的顺序正好相反。例如,假设有3个资源,获得时顺序是资源1-资源2-资源3,释放时的顺序则为资源3-资源2-资源1。 7.4多线程技术 7.4.4 线程组 线程组(Thread Group)是指包含了许多线程的对象集,并可以拥有一个名字和一些相关的属性,用于统一管理组中的线程。Java中,将所有线程和线程组组织在一个线程组中,形成一棵树。若创建线程时不明确指定所属的线程组,则将被放在一个默认的线程组(系统线程组)中。Java语言提供了一个线程组类ThreadGroup,可用于对线程组中线程和线程组进行操作,如启动或阻塞组中的所有线程。该类的构造方法为ThreadGroup(String groupName)。 7.4多线程技术 7.4多线程技术 7.4多线程技术 7.5综合应用举例 生产者-消费者模型是典型的多线程应用的原型。本节介绍一个模拟生产者和消费者关系的程序。其中,生产者在一个循环中不断生产了从1到10的共享数据,而消费者则不断地消费生产者生产的1到10这些共享数据。 【例7-12】生产者-消费者示例的源代码。 /* ==================================================== * 文件:Ex7_12_TestProducerConsumer.java * 描述:生产者-消费者 * 包含五个类:主控类Ex7_12_TestProducerConsumer,共享数据控制类ShareData, * 共享数据类MyData,生产者Producer和消费者Consumer * ==================================================== */ // 主控类 7.5综合应用举例 public class Ex7_12_TestProducerConsumer { ? public static void main(String[] args) { ShareData s = new ShareData(); new Consumer(s).start(); new Producer(s).start(); } }// 共享数据类 class MyData { // 可以扩展,表达复杂的数据 public int data; } 7.5综合应用举例 ?// 共享数据控制类 class ShareData { // 共享数据 private MyData data; // 通知变量 private boolean writeable = true; // ------------------------------------------------------------------------- // 需要注意的是:在调用wait()方法时,需要把它放到一个同步段里,否则将会出现 // java.lang.IllegalMonitorStateException: current thread notowner的异常。 // ------------------------------------------------------------------

文档评论(0)

586334000 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档