黑马程序员技术交流社区

标题: 阳哥的多线程问题(2个生产者,3个消费者) [打印本页]

作者: franksight    时间: 2015-2-17 15:17
标题: 阳哥的多线程问题(2个生产者,3个消费者)
  1. package ceshi;

  2. class ProducerConsumerDemo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 Resource r = new Resource();
  7.                 //启动生产者和消费者线程
  8.                 new Thread(new Producer1(r)).start();
  9.                 new Thread(new Producer1(r)).start();
  10.                 new Thread(new Consumer1(r)).start();
  11.                 new Thread(new Consumer1(r)).start();
  12.                 new Thread(new Consumer1(r)).start();
  13.         }
  14. }


  15. class Resource
  16. {
  17.         private String name;
  18.         private int count = 1;
  19.         private boolean flag = false;//标志变量,代表商品的有无

  20.         public synchronized void make(String name)
  21.         {
  22.                 while(flag)//flag为true,表明正在消费商品,需等待
  23.                         try{this.wait();}catch(Exception e){}
  24.                 this.name = name+"..."+count++;

  25.                 System.out.println(Thread.currentThread().getName()+"...生产者.."+this.name);
  26.                 flag = true;//有商品了
  27.                 this.notifyAll();//唤醒所有的等待线程
  28.         }

  29.         public synchronized void eat()
  30.         {
  31.                 while(!flag)//flag为false,则等待,即只有flag为true时,才有商品可以进行消费
  32.                         try{wait();}catch(Exception e){}
  33.                 System.out.println(Thread.currentThread().getName()+"---消费者........."+this.name);
  34.                 flag = false;//商品被消费完了
  35.                 this.notifyAll();
  36.         }
  37. }
  38. class Producer1 implements Runnable
  39. {
  40.         private Resource res;

  41.         Producer1(Resource res)
  42.         {
  43.                 this.res = res;
  44.         }
  45.         public void run()
  46.         {
  47.                 while(true)
  48.                 {
  49.                         res.make("+商品+");
  50.                 }
  51.         }
  52. }

  53. class Consumer1 implements Runnable
  54. {
  55.         private Resource res;

  56.         Consumer1(Resource res)
  57.         {
  58.                 this.res = res;
  59.         }
  60.         public void run()
  61.         {
  62.                 while(true)
  63.                 {
  64.                         res.eat();
  65.                 }
  66.         }
  67. }
复制代码

作者: franksight    时间: 2015-2-17 15:19
分享分享我的做法。。。




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