- 1、本文档共38页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
java_base4的_thread
线程通信 假定线程t1和线程t2共同操纵一个对象s,这两个线程可以通过对象s的wait()和notify()方法来进行的通信。 S 对象 method1() t1 t2 method2() 生产者与消费者线程通信 class Stack { … public synchronized String pop() { this.notifyAll(); while(point==-1){ System.out.println(Thread.currentThread().getName()+: wait); try{ this.wait(); }catch(InterruptedException e){throw new RuntimeException(e);} } String goods = buffer[point]; buffer[point]=null; Thread.yield(); point--; return goods; } public synchronized void push(String goods) { …} } 参见mythread\newproblem\SyncTest.java 生产者与消费者线程通信 class Stack { … public synchronized void push(String goods) { this.notifyAll(); while(point==buffer.length-1){ System.out.println(Thread.currentThread().getName()+: wait); try{ this.wait(); }catch(InterruptedException e){throw new RuntimeException(e);} } point++; Thread.yield(); buffer[point]=goods; } } 生产者与消费者线程通信 public class SyncTest { public static void main(String args[]) { Stack stack1 = new Stack(stack1); Producer producer1 = new Producer(stack1,producer1); Consumer consumer1 = new Consumer(stack1,consumer1); Consumer consumer2 = new Consumer(stack1,consumer2); } } 生产者与消费者线程通信 对于stack1,同时有两个消费者取出产品,只有一个生产者加入产品,因此有可能导致消费者取产品时堆栈为空的情况。以下是consumer2线程取产品时可能出现的流程。 (1)执行this.notifyAll()方法,此时this引用的stack1对象的等待池中没有任何线程,因此该方法什么也不做。 (2)由于point为-1,因此执行this.wait()方法,consumer2线程释放stack1对象的锁,并且进入stack1对象的等待池。 (3)producer1线程获得stack1对象的锁,开始执行push()方法。 (4)producer1线程首先执行this.notifyAll()方法,此时this引用的stack1对象的等待池中有一个consumer2线程,因此把这个线程转到stack1对象的锁池。 (5)producer1线程判断point不为buffer.length-1,无需执行this.wait()方法,producer1线程向堆栈中加入一个产品,然后退出push()方法,并且释放锁。 (6)在stack1对象的锁池中的consumer2线程获得了锁,转到就绪状态,只要获得了CPU,就能继续执行pop()方法。 终止线程 当线程执行完run()方法,它将自然终止运行。 Thread有一个stop()方法,可以强制结束线程,但这种方法是不安全的。因此,在JDK1.2开始的版本中,stop()方法已经被废弃。 实际编程中,一般是定义一个标志变量,然后通过程序来改变标志变量的值,从而控制线程从run()方法中自然退出。 参见MyThreadStop.java 终止线程 publ
您可能关注的文档
- G的MAT数学词汇精选.pdf
- G的it 入门教程.docx
- GST火灾自动报警及消防联动控的制系统产品选型手册2015.9.pdf
- G的SM空闲相关参数.pptx
- H18---四大因素导致G5京昆高速公路秦岭隧道群进口特大恶性的交通事故.pdf
- G的MP验证管理概述.ppt
- H3CWA2620E-F室内放装型802.11n无的线接入点产品彩页.pdf
- Git版本控制系统的的基本使用.pptx
- hadoop的安装文档.docx
- H3的C S5024P汇聚.doc
- 2024高考物理一轮复习规范演练7共点力的平衡含解析新人教版.doc
- 高中语文第5课苏轼词两首学案3新人教版必修4.doc
- 2024_2025学年高中英语课时分层作业9Unit3LifeinthefutureSectionⅢⅣ含解析新人教版必修5.doc
- 2024_2025学年新教材高中英语模块素养检测含解析译林版必修第一册.doc
- 2024_2025学年新教材高中英语单元综合检测5含解析外研版选择性必修第一册.doc
- 2024高考政治一轮复习第1单元生活与消费第三课多彩的消费练习含解析新人教版必修1.doc
- 2024_2025学年新教材高中英语WELCOMEUNITSectionⅡReadingandThi.doc
- 2024_2025学年高中历史专题九当今世界政治格局的多极化趋势测评含解析人民版必修1.docx
- 2024高考生物一轮复习第9单元生物与环境第29讲生态系统的结构和功能教案.docx
- 2024_2025学年新教材高中英语UNIT5LANGUAGESAROUNDTHEWORLDSect.doc
最近下载
- 第12课 新文化运动 课件(23张PPT).pptx
- 机载临时支护装置安装使用说明书.docx
- 中国基本国情教案(汉语国际教育).docx
- 人教版数学二年级上册第五单元《观察物体(一)》大单元整体教学设计.doc
- 第2章 直线与圆的位置关系 复习课.doc VIP
- 中职学校《金属加工与实训》全套电子教案(含教学进度计划)(配套教材:高教版中职统编)云天课件( word 版).docx
- 程家惠《洋话汉音》(升级版).doc
- onbon仰邦科技 六代三基色控制器 BX-6K系列 规格书 本压缩包包含BX-6K1、6K2、 6K3、6K4-T08、6K4-T12 5个产品的规格书。说明书用户手册.pdf
- 职业生涯规划书ppt职业生涯规划书ppt.ppt
- 卡拉OK数码功放KMA-1080KMA-980中文使用说明书.pdf
文档评论(0)