黑马程序员技术交流社区

标题: 多线程的多生产多消费的解决方法 [打印本页]

作者: 王春蕾    时间: 2014-4-15 14:25
标题: 多线程的多生产多消费的解决方法
  1. /*
  2. 多生产者和多消费者   等待唤醒机制
  3. */
  4. class ThreadDemo_Producer_Consumer2
  5. {
  6.         public static void main(String[] args)
  7.         {
  8.                 Resource r=new Resource();
  9.                 Producer pro=new Producer(r);
  10.                 Consumer con=new Consumer(r);
  11.                 Thread t1=new Thread(pro);
  12.                 Thread t2=new Thread(pro);
  13.                 Thread t3=new Thread(con);
  14.                 Thread t4=new Thread(con);
  15.                 t1.start();
  16.                 t2.start();
  17.                 t3.start();
  18.                 t4.start();
  19.         }
  20. }

  21. class Resource
  22. {
  23.         //定义一个商品的名字
  24.         private String name;
  25.         //定义一个商品的编号
  26.         private int count=1;
  27.         //定义标记
  28.         boolean flag=false;
  29.         public synchronized void set(String name)
  30.         {
  31.                 while(flag)
  32.                         try
  33.                         {
  34.                                 wait();
  35.                         }
  36.                         catch (InterruptedException e)
  37.                         {
  38.                         }
  39.                 this.name=name+"---"+count;
  40.                 count++;
  41.                 System.out.println(Thread.currentThread().getName()+"...生产了,"+this.name);
  42.                 //将标记改为true
  43.                 flag=true;
  44.                 notifyAll();
  45.         }
  46.         public synchronized void get()
  47.         {
  48.                 while(!flag)
  49.                         try
  50.                         {
  51.                                 wait();
  52.                         }
  53.                         catch (InterruptedException e)
  54.                         {
  55.                         }
  56.                 System.out.println(Thread.currentThread().getName()+"...消费了.."+this.name);
  57.                 flag=!flag;
  58.                 notifyAll();
  59.         }
  60. }
  61. //定义生产者的任务
  62. class Producer implements Runnable
  63. {
  64.         private Resource r;
  65.         Producer(Resource r)
  66.         {
  67.                 this.r=r;
  68.         }
  69.         public void run()
  70.         {
  71.                 while(true)
  72.                 {
  73.                         r.set("蛋糕");
  74.                 }
  75.         }
  76. }
  77. //定义消费者的任务
  78. class Consumer implements Runnable
  79. {
  80.         private Resource r;
  81.         Consumer(Resource r)
  82.         {
  83.                 this.r=r;
  84.         }
  85.         public void run()
  86.         {
  87.                 while(true)
  88.                 {
  89.                         r.get();
  90.                 }
  91.         }
  92. }
复制代码





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