A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

真是,如果不天天练就手生,写这么短的程序,写了得半个小时,哎~~

  1. import java.util.concurrent.locks.Condition;
  2. import java.util.concurrent.locks.Lock;
  3. import java.util.concurrent.locks.ReentrantLock;


  4. public class ProducerConsumerDemo
  5. {
  6.         public static void main(String[] args)
  7.         {
  8.                 Resource r = new Resource();

  9.                
  10.                 Producer p = new Producer(r);
  11.                 Consumer c = new Consumer(r);
  12.                
  13.                 Thread t1 = new Thread(p);
  14.                 Thread t2 = new Thread(p);
  15.                 Thread t3 = new Thread(c);
  16.                 Thread t4 = new Thread(c);
  17.                
  18.                 t1.start();
  19.                 t2.start();
  20.                 t3.start();
  21.                 t4.start();
  22.                
  23.                
  24.                
  25.                
  26.         }
  27.        
  28. }

  29. class Resource
  30. {
  31.         Lock lock = new ReentrantLock();
  32.         Condition proCon = lock.newCondition();
  33.         Condition conCon = lock.newCondition();
  34.         private String name;
  35.         private int count=1;
  36.         boolean flag = false;
  37.         public void set(String name) throws InterruptedException
  38.         {
  39.                 lock.lock();
  40.                 try{
  41.                 while(flag)
  42.                         proCon.await();
  43.                 this.name = name +":"+ count++;
  44.                 System.out.println(Thread.currentThread().getName()+"生产出了"+this.name);
  45.                 flag = true;
  46.                 conCon.signal();
  47.                 }
  48.                 finally
  49.                 {
  50.                         lock.unlock();
  51.                 }
  52.                
  53.         }
  54.        
  55.         public void out() throws InterruptedException
  56.         {
  57.        
  58.                 lock.lock();
  59.                 try
  60.                 {
  61.                         while(!flag)
  62.                                 conCon.await();
  63.                         System.out.println(Thread.currentThread().getName()+"消费出了。。。。。。。"+this.name);
  64.                         flag = false;
  65.                         proCon.signal();
  66.                 }
  67.                 finally
  68.                 {
  69.                         lock.unlock();
  70.                 }
  71.        
  72.         }
  73. }

  74. class Producer implements Runnable
  75. {
  76.         private Resource res;
  77.         Producer(Resource res)
  78.         {
  79.                 this.res = res;
  80.         }
  81.         public void run()
  82.         {
  83.                 while(true)
  84.                 {
  85.                         try
  86.                         {
  87.                                 res.set("商品");
  88.                         }
  89.                         catch(InterruptedException e)
  90.                         {
  91.                                
  92.                         }
  93.                 }
  94.                
  95.         }
  96. }

  97. class Consumer implements Runnable
  98. {
  99.         private Resource res;
  100.        
  101.         Consumer(Resource res)
  102.         {
  103.                 this.res = res;
  104.         }
  105.         public void run()
  106.         {
  107.                 while(true)
  108.                 {
  109.                         try
  110.                         {
  111.                                 res.out();
  112.                         }
  113.                         catch(InterruptedException e)
  114.                         {                               
  115.                         }                       
  116.                 }               
  117.         }
  118. }






复制代码



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马