黑马程序员技术交流社区

标题: 线程间通信,生产者消费者问题 [打印本页]

作者: 袭喜悦    时间: 2013-2-13 20:45
标题: 线程间通信,生产者消费者问题
  1. class Resource
  2. {
  3. private String name;
  4. private int count=1;
  5. private boolean flag=false;
  6. public synchronized void set(String name)
  7. {
  8. while(flag)
  9. try{this.wait();}catch(Exception e){}
  10. this.name=name+"--"+count++;
  11. System.out.println(Thread.currentThread().getName()+"...生产者......."+this.name);
  12. flag=true;
  13. this.notify();
  14. }
  15. public synchronized void out(){
  16. while(!flag)
  17. try{this.wait();}catch(Exception e){}
  18. System.out.println(Thread.currentThread().getName()+"...消费者..."+this.name);
  19. flag=false;
  20. this.notify();
  21. }
  22. }
  23. class ProducerConsumerDemo
  24. {
  25. public static void main(String[] args)
  26. {
  27. Resource r=new Resource();
  28. Producer pro=new Producer(r);
  29. Consumer con=new Consumer(r);
  30. Thread t1=new Thread(pro);
  31. Thread t2=new Thread(con);
  32. t1.start();
  33. t2.start();

  34. }
  35. }
  36. class Producer implements Runnable
  37. {
  38. private Resource res;
  39. Producer(Resource res)
  40. {
  41. this.res=res;
  42. }
  43. public void run()
  44. {
  45. while(true)
  46. {
  47. res.set("+商品+1");
  48. }
  49. }
  50. }
  51. class Consumer implements Runnable
  52. {
  53. private Resource res;
  54. Consumer(Resource res)
  55. {
  56. this.res=res;
  57. }
  58. public void run()
  59. {
  60. while(true)
  61. {
  62. res.out();
  63. }
  64. }
  65. }
复制代码
使用notify();为什么没有出现全部等待的情况,打印结构竟然跟notifyall()一样的
作者: 石鲁杰    时间: 2013-2-13 20:53
  1. class ProducerConsumerDemo
  2. {
  3. public static void main(String[] args)
  4. {
  5. Resource r=new Resource();
  6. Producer pro=new Producer(r);
  7. Consumer con=new Consumer(r);
  8. Thread t1=new Thread(pro);
  9. Thread t2=new Thread(con);
  10. Thread t3 = new Thread(con);
  11. Thread t4 = new Thread(con);
  12. t1.start();
  13. t2.start();
  14. t3.start();
  15. t4.start();
  16. }
  17. }
复制代码
楼主只有两个线程,生产完,接着就被消费了,当然不会出现被等待的情况,多加几个线程就看到效果了
作者: 袭喜悦    时间: 2013-2-13 20:54
石鲁杰 发表于 2013-2-13 20:53
楼主只有两个线程,生产完,接着就被消费了,当然不会出现被等待的情况,多加几个线程就看到效果了 ...

:L过年过的混乱了。。。。晕死了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2