`
peizhiinfo
  • 浏览: 1426227 次
文章分类
社区版块
存档分类
最新评论

【郭林专刊】多线程知识总结线程通信,wait()与notify()的运用

 
阅读更多
编写一个生产与消费的程序,具体要求:店主告诉生产者生产一组产品,生产者生产出之后运给店主,店主通知生产者我们这里只放得下一组产品你等等再生产,店主通知消费者取走这组产品,店主通知消费者你等等,我们这里没有产品了,店主告诉生产者生产一组产品,生产者生产出之后运给店主,店主通知生产者... ...就是这样一个运作流程(如下图所示).

代码:

  1. classShengChanimplementsRunnable
  2. {
  3. DianZhud;
  4. publicShengChan(DianZhud)
  5. {
  6. this.d=d;
  7. }
  8. publicvoidrun()
  9. {
  10. inti=0;
  11. while(true)
  12. {
  13. System.out.println("");//很奇怪,去掉这行就不能交替运行了,知道的网友,请赐教,谢谢.
  14. if(i==0)
  15. {
  16. d.put("001","洗衣机");
  17. }
  18. else
  19. {
  20. d.put("002","冰箱");
  21. }
  22. i=(i+1)%2;
  23. }
  24. }
  25. }
  26. classXiaoFeiimplementsRunnable
  27. {
  28. DianZhud;
  29. publicXiaoFei(DianZhud)
  30. {
  31. this.d=d;
  32. }
  33. publicvoidrun()
  34. {
  35. while(true)
  36. {
  37. d.get();
  38. }
  39. }
  40. }
  41. classDianZhu
  42. {
  43. privateStringproID="";
  44. privateStringproName="";
  45. privatebooleanisFull=false;//店主放的产品是否满了?默认为false;表示未满.
  46. publicsynchronizedvoidput(StringproID,StringproName)
  47. {
  48. if(isFull==false)//如果是空的.
  49. {
  50. //生产产品
  51. this.proID=proID;
  52. this.proName=proName;
  53. isFull=true;//产品已经生产好
  54. //System.out.println(Thread.currentThread().getName()+":生产完毕!");
  55. notify();//通知[消费线程]工作,注意:notify();具备有先启动,等该线程休息,才生效的特性
  56. }
  57. else//如果是满的,[生产线程]休息
  58. {
  59. //System.out.println(Thread.currentThread().getName()+":休息!\n");
  60. try{wait();}catch(Exceptione){e.printStackTrace();}
  61. }
  62. }
  63. publicsynchronizedvoidget()
  64. {
  65. if(isFull==true)//如果有产品
  66. {
  67. //消费者取走产品
  68. System.out.println("proID:"+proID);
  69. System.out.println("proName:"+proName);
  70. isFull=false;//消费者已经取走产品
  71. //System.out.println(Thread.currentThread().getName()+":取产品完毕!");
  72. notify();//通知[生产线程]工作
  73. }
  74. else//如果没有产品,[消费线程]休息
  75. {
  76. //System.out.println(Thread.currentThread().getName()+":休息!\n");
  77. try{wait();}catch(Exceptione){e.printStackTrace();}
  78. }
  79. }
  80. }
  81. publicclassShengChanLian
  82. {
  83. publicstaticvoidmain(String[]args)
  84. {
  85. DianZhud=newDianZhu();
  86. ShengChans=newShengChan(d);//创建对象的同时把DianZhu对象传过去
  87. XiaoFeix=newXiaoFei(d);
  88. //启动线程
  89. newThread(s).start();
  90. newThread(x).start();
  91. }
  92. }

输出结果:

<style type="text/css"> <!-- .gh_bg {font-size:12px; width:100%; background-color:#E7E5DC} .csdn_des {background-color:#E7E5DC; height:26px; line-height:26px; overflow:hidden; float:left; padding:4px} .csdn_call {background-color:#000; color:#FFF; height:26px; line-height:26px; float:left; border-right:solid 3 #F00; padding:4px} .string {color:#F00; font-weight:bold} .gh_clear {clear:both; overflow:hidden; width:0px; height:0px} --> </style>
分享到:
评论

相关推荐

    单分散性钴铁氧体纳米粒子的研究进展

    单分散性钴铁氧体纳米粒子的研究进展,王志成,郭林,钴铁氧体纳米磁性粒子具有良好的物理化学性能,因此其相关合成备受关注。本文总结了钴铁氧体纳米粒子的制备方法,如化学共沉淀法

    小尺寸、单分散Cd

    采用改进高温热分解法合成了Cd2+掺杂NaLuF4∶Yb, Er纳米晶体,研究了Cd2+对晶相形成和发光强度的影响,采用CASTEP计算不同掺杂浓度下β-NaLuF4∶Yb, Er的形成能。在掺杂浓度为6mol%时合成的纳米晶荧光强度最强,其相较...

    论文研究-小波去噪的低信噪比直扩信号扩频码盲估计算法 .pdf

    小波去噪的低信噪比直扩信号扩频码盲估计算法,郭林,吕明,本文针对低信噪比直扩信号扩频码的盲估计问题,提出了利用小波降噪的方法对直扩信号进行预处理,然后再分别运用特征值分解算法、

    学习见证消息推送时刻笔记

    学习郭林老师的见证消息推送时刻笔记,笔记未整理有点乱,有很多不足,希望大家指点,源代码随后上传

    Android大屏幕适配demo

    Android大屏幕适配demo,这个是仿照郭林文章中的例子,他的例子是用eclipse写的,直接运行会不兼容最新的sdk,我改成了AndroidStudio可以直接运行的demo.郭林此代码文章的连接 ...

    PVP高分子包覆的镍纳米材料的形态控制研究

    PVP高分子包覆的镍纳米材料的形态控制研究,周苇,郭林,本文报道了辅以PVP(聚乙烯吡咯烷酮)修饰水合肼还原二价镍盐制备镍的纳米材料。通过改变镍盐与PVP的摩尔浓度比、回流温度、盐的种

    Synthesis of Ni Net-like Nanomaterials and Their Magnetic Properties

    丝网状镍纳米材料的合成与磁学性质研究,周苇,郭林,以高聚物为软模板,利用温和的湿化学法合成了丝网状镍纳米材料。利用扫描电镜、高分辨透射电镜及X射线衍射仪对样品进行了表征分�

    VolleyDemo

    这个是参考网上的资料,结合google官方的文档写的一个volley的简单demo,并做了简单的封装,想更加系统的学习volley可以参考google官方文档以及郭林的博客

    Android photoWallDemo

    仿照郭林博客http://blog.csdn.net/guolin_blog/article/details/34093441写的demo,androidStudio版本,他下载的链接是eclipse的代码,在高版本的AndroidStudio运行会不方便

    论文研究-基于评论对象的新闻影响力预测算法 .pdf

    基于评论对象的新闻影响力预测算法,魏忠祥,郭林,近年来网络媒体对社会的影响力越来越大,能够定量地分析预测新闻事件的影响力显得尤为重要。目前一些研究都只是针对新闻的点击量

    温度应力下海底管线水平屈曲分析

    温度应力下海底管线水平屈曲分析,刘润,郭林坪,温度应力下海底管线的屈曲大变形是管线设计中所要考虑的关键问题之一。以某实际工程为背景,应用理想平直管线发生水平向屈曲的解

    Android布局ListView下拉刷新demo

    android中数据的更新需要用户很方便就能操作,其中下拉刷新就是很好的一种用户体验方式,这是郭林大神在网上的一个下拉刷新的demo,我做了一点小小的修改,然后加了一下注释,方便大家参考。

    八面体中空银纳米笼的高效合成及其表面增强拉曼性能研究

    八面体中空银纳米笼的高效合成及其表面增强拉曼性能研究,黄凤琴,郭林,以八面体Cu2O为模板,柠檬酸钠作为保护剂,NaBH4和AgNO3反应产生的银纳米颗粒在模板表面沉积形成银包覆氧化亚铜的核壳结构,最后用乙�

Global site tag (gtag.js) - Google Analytics