欢迎来到天天文库
浏览记录
ID:34504506
大小:102.83 KB
页数:5页
时间:2019-03-07
《黑马程序员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的线程会被存储到线
3、程池中。 2.notify():唤醒线程池中的一个线程(任何一个都有可能)。 3.notifyAll():唤醒线程池中的所有线程。 P.S. 1、这些方法都必须定义在同步中,因为这些方法是用于操作线程状态的方法。 2、必须要明确到底操作的是哪个锁上的线程! 3、wait和sleep区别? 1)wait可以指定时间也可以不指定。sleep必须指定时间。 2)在同步中时,对CPU的执行权和锁的处理不同。 wait:释放执行权,释放锁。 sleep:释放执行权,不释放锁。 为什么操作线程的方法wait、no
4、tify、notifyAll定义在了object类中,因为这些方法是监视器的方法,监视器其实就是锁。锁可以是任意的对象,任意的对象调用的方式一定在object类中。 生产者-消费者问题:1.classResource{2. privateStringname;3. privateStringsex;4. privatebooleanflag=false;5.6. publicsynchronizedvoidset(Stringname,Stringsex){7. if(flag)8. try{
5、9. 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.
6、 if(!flag)21. 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.//
7、输入1.classInputimplementsRunnable{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","女");
8、14. }15. x=(x+1)%2
此文档下载收益归作者所有