欢迎来到天天文库
浏览记录
ID:32165927
大小:102.82 KB
页数:5页
时间:2019-02-01
《黑马程序员java教程:线程间通信》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、线程间通信线程间通信涉及的方法 多个线程在处理统一资源,但是任务却不同,这时候就需要线程间通信。 等待/唤醒机制涉及的方法: 1.wait():让线程处于冻结状态,被wait的线程会被存储到线程池中。 2.notify():唤醒线程池中的一个线程(任何一个都有可能)。 3.notifyAll():唤醒线程池中的所有线程。 P.S. 1、这些方法都必须定义在同步中,因为这些方法是用于操作线程状态的方法。 2、必须要明确到底操作的是哪个锁上的线程! 3、wait和sleep区别? 1)wait可以指定时间也可以不指定。sleep必须指定时
2、间。 2)在同步中时,对CPU的执行权和锁的处理不同。 wait:释放执行权,释放锁。 sleep:释放执行权,不释放锁。 为什么操作线程的方法wait、notify、notifyAll定义在了object类中,因为这些方法是监视器的方法,监视器其实就是锁。锁可以是任意的对象,任意的对象调用的方式一定在object类中。线程间通信线程间通信涉及的方法 多个线程在处理统一资源,但是任务却不同,这时候就需要线程间通信。 等待/唤醒机制涉及的方法: 1.wait():让线程处于冻结状态,被wait的线程会被存储到线程池中。 2.
3、notify():唤醒线程池中的一个线程(任何一个都有可能)。 3.notifyAll():唤醒线程池中的所有线程。 P.S. 1、这些方法都必须定义在同步中,因为这些方法是用于操作线程状态的方法。 2、必须要明确到底操作的是哪个锁上的线程! 3、wait和sleep区别? 1)wait可以指定时间也可以不指定。sleep必须指定时间。 2)在同步中时,对CPU的执行权和锁的处理不同。 wait:释放执行权,释放锁。 sleep:释放执行权,不释放锁。 为什么操作线程的方法wait、notify、notifyA
4、ll定义在了object类中,因为这些方法是监视器的方法,监视器其实就是锁。锁可以是任意的对象,任意的对象调用的方式一定在object类中。 生产者-消费者问题:1.classResource{2. privateStringname;3. privateStringsex;4. privatebooleanflag=false;5.6. publicsynchronizedvoidset(Stringname,Stringsex){7. if(flag)8. try{9.
5、 this.wait();10. }catch(InterruptedExceptione){11. e.printStackTrace();12. }13. this.name=name;14. this.sex=sex;15. flag=true;16. this.notify();17. }18. 19. publicsynchronizedvoidout(){20. if(!flag)21.
6、 try{22. this.wait();23. }catch(InterruptedExceptione){24. e.printStackTrace();25. }26. System.out.println(name+"..."+sex);27. flag=false;28. this.notify();29. } 30.}31.32.//输入1.classInputimplements
7、Runnable{2. Resourcer;3. Input(Resourcer){4. this.r=r;5. }6.7. publicvoidrun(){8. intx=0;9. while(true){10. if(x==0){11. r.set("mike","男");12. }else{13. r.set("lili","女");14. }15.
8、 x=(x+1)%2
此文档下载收益归作者所有