线程深入wait-notify机制,线程池

上传人:ldj****22 文档编号:36117465 上传时间:2018-03-25 格式:PDF 页数:14 大小:180.62KB
返回 下载 相关 举报
线程深入wait-notify机制,线程池_第1页
第1页 / 共14页
线程深入wait-notify机制,线程池_第2页
第2页 / 共14页
线程深入wait-notify机制,线程池_第3页
第3页 / 共14页
线程深入wait-notify机制,线程池_第4页
第4页 / 共14页
线程深入wait-notify机制,线程池_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《线程深入wait-notify机制,线程池》由会员分享,可在线阅读,更多相关《线程深入wait-notify机制,线程池(14页珍藏版)》请在金锄头文库上搜索。

1、蓝杰 java 讲习录 只为不凡而来!十四节十四节:wait/notify 机制机制,线程池线程池目标:1.理解 wait/notify机制和规则2.掌握阻塞队列的用户; 3.理解线程状态概念; 4.理解线程池的概念。1. 生产 / 消费者模型实现 . 2 1.wait/notify 机制 : . 2 2. 阻塞队列实现线程间通信 . 5 2.start() 与 run()方法详解:线程的状态 . 8 3. 线程池应用 . 8 1. 线程池的创建与使用: . 8 2.JDK 内置的线程池使用 . 124. 线程的调度及其它方法 . 131. 线程的 join() 调用 . 132. 线程的其它

2、方法 . 14总结和任务: . 141蓝杰 java 讲习录 只为不凡而来!1.1.生产生产/ /消费者模型实现消费者模型实现1.wait/notify1.wait/notify 机制机制: :在前我们己实现了一种线程间通讯的方式,这种方式是我们自己编码实现,在 java 中, 每个对象都有从 Object 父类继承而来的二个关与线程间通讯的方法 wait()和 notify(),如其 方法名所示,一个是等待,一个是通知,当在一个对象上调用 wait()方法时,当前线程就会 进行 wait 状态,直到收到另一个对象的 notify()发出通知,才会执行下一步计算,线程在 wait 中 , 也

3、可 能 被 中 断 , 所 以 调 用 wait 方 法 时 , 也 要 catch 可 能 出 现 的 InterruptedException异常。;在多线程通讯中,经常会用对象的这两个方法,一个典型的案 例就是“生产/消费者模型”;“生产/消费者”通讯模型的规则是,仅当集合中没有对象时,生产线程会放入一个对象, 如有集合中有一个对象时,消费线程要马上取出这个对象,这个示例中,我们设计了三个类; 第一个是一个模拟的数据对象类Student.java,生成要向集合中放入的对象,代码很简单: /* 用来交换的数据对象模型* authorauthor 蓝杰*/classclass Student

4、intint id;String name;publicpublic String toString()returnreturn id+“ “+name;第二个类是生产者线程 ProduceThread.java,生产者线程运象一但运行,就会尝试锁定 与消费者对象共享的对象集合,一但它锁定这个集合(即进入 synchronized 保护的代码块,如 果集合中没有对象,它就会放入一个,然后发出 notify()通知;如果集合中有对象,生产者 线程就会调用wait()方法,将自己处于“等待”状态,直到收到一个notify()通知: /生产者线程:无数据时再存,存入一个就发通知对象集合生产线程:放入

5、对象 消费线程:取出对象2蓝杰 java 讲习录 只为不凡而来!classclass ProduceThread extendsextends Thread/构造器参数是生产线程要放入数据的队列ProduceThread(List shareList)thisthis.shareList=shareList;publicpublic voidvoid run()System.out.println(“生产线程己启动.“+shareList.size() );whilewhile(truetrue)trytryThread.sleep(2000);synchronizedsynchronized

6、(shareList)whilewhile(shareList.size()0)shareList.wait();whilewhile(shareList.size()=0)Student st=newnew Student();count+;st.id=count;st.name=count+“aaa“;System.out.println(“-生产线程放入对象:“+st.toString() );shareList.add(st);/通知消费线程,队列中有对象了shareList.notify();catchcatch(Exception ef)ef.printStackTrace();/

7、*用来标记放入对象的每一个独立ID号*/privateprivate staticstatic intint count=0;/与消费线程或以共同存取的对象列表privateprivate List shareList;第三个类是消费者线程 CustomerThread.java,消费线程运一但运行,就会尝试锁定与生 产线程对象共享的对象集合,一但它锁定这个集合(即进入 synchronized 保护的代码块,如果 集合中没有对象,消费线程就会调用 wait()方法,将自己处于“等待”状态,直到收到一个 notify()通知;如果集中有对象,它将取出这个对象后,发出 notify()通知告诉生产者线程, 要放入数据了: /取数据线程:当有数据时取,取完发通知3蓝杰 java 讲习录 只为不凡而来!classclass CustomerThread extendsextends ThreadCustomerThread(List shareList)thisthis.shareList=shareList;publicpublic voidvoid run()System.out.println(“消费线程己启动.“+shareList.size() );whilewhile(truetrue)trytrysynchronizedsynchronized(shareL

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号