黑马程序员java教程线程间通信

上传人:xiao****1972 文档编号:84071618 上传时间:2019-03-02 格式:DOCX 页数:5 大小:102.83KB
返回 下载 相关 举报
黑马程序员java教程线程间通信_第1页
第1页 / 共5页
黑马程序员java教程线程间通信_第2页
第2页 / 共5页
黑马程序员java教程线程间通信_第3页
第3页 / 共5页
黑马程序员java教程线程间通信_第4页
第4页 / 共5页
黑马程序员java教程线程间通信_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《黑马程序员java教程线程间通信》由会员分享,可在线阅读,更多相关《黑马程序员java教程线程间通信(5页珍藏版)》请在金锄头文库上搜索。

1、线程间通信 线程间通信涉及的方法 多个线程在处理统一资源,但是任务却不同,这时候就需要线程间通信。 等待/唤醒机制涉及的方法: 1. wait():让线程处于冻结状态,被wait的线程会被存储到线程池中。 2. notify():唤醒线程池中的一个线程(任何一个都有可能)。 3. notifyAll():唤醒线程池中的所有线程。 P.S. 1、这些方法都必须定义在同步中,因为这些方法是用于操作线程状态的方法。 2、必须要明确到底操作的是哪个锁上的线程! 3、wait和sleep区别? 1)wait可以指定时间也可以不指定。sleep必须指定时间。 2)在同步中时,对CPU的执行权和锁的处理不同

2、。 wait:释放执行权,释放锁。 sleep:释放执行权,不释放锁。 为什么操作线程的方法wait、notify、notifyAll定义在了object类中,因为这些方法是监视器的方法,监视器其实就是锁。锁可以是任意的对象,任意的对象调用的方式一定在object类中。 生产者-消费者问题:1. class Resource2. private String name ;3. private String sex ;4. private boolean flag = false;5.6. public synchronized void set(String name,String sex)7

3、. if(flag )8. try9. this.wait();10. catch(InterruptedException e)11. e.printStackTrace();12. 13. this.name = name;14. this.sex = sex;15. flag = true ;16. this.notify();17. 18. 19. public synchronized void out()20. if(!flag )21. try22. this.wait();23. catch(InterruptedException e)24. e.printStackTrac

4、e();25. 26. System. out.println(name + . + sex);27. flag = false ;28. this.notify();29. 30. 31.32. /输入33. class Input implements Runnable34. Resource r;35. Input(Resource r)36. this.r = r;37. 38.39. public void run()40. int x = 0;41. while(true )42. if(x = 0)43. r.set( mike,男 );44. else45. r.set( li

5、li,女 );46. 47. x = (x + 1)%2;48. 49. 50. 51.52. /输出53. class Output implements Runnable54. Resource r;55.56. Output(Resource r)57. this.r = r;58. 59.60. public void run()61. while(true )62. r.out();63. 64. 65. 66.67. class ResourceDemo 68. public static void main(String args)69. /创建资源70. Resource r = new Resource();71. /创建任务72. Input in = new Input(r);73. Output out = new Output(r);74. /创建线程,执行路径75. Thread t1 = new Thread(in);76. Thread t2 = new Thread(out);77. /开启线程78. t1.start();79. t2.start();80. 81. 82.复制代码 运行结果:

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

当前位置:首页 > 大杂烩/其它

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