锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

多线程之多生产多消费者

时间:2023-02-23 11:30:00 takex竹中光电传感器astakex竹中传感器us系列takex竹中传感器ustakex竹中传感器f11cr

 import java.util.concurrent.locks.*;  public class Test23 {  public static void main(String[] args) {   Resource r = new Resource();   String x = "黄焖鸡";    PutX px = new PutX(r, x);   TakeX tx = new TakeX(r, x);   Thread t0 = new Thread(px);   Thread t1 = new Thread(px);   Thread t2 = new Thread(tx);   Thread t3 = new Thread(tx);    t0.start();   t1.start();   t2.start();   t3.start();  } }  class Resource {   Lock lock = new ReentrantLock();  Condition full = lock.newCondition();  Condition empty = lock.newCondition();   private String[] item = new String[400];  private int taker = 0;  private int puter = 0;  private int count = 0;   public void put(String x) {   while (true) {    lock.lock();    //用while不用if在这里等待多个线程后,被唤醒,必须再次推断这一条件    while (count == item.length) {     try {      full.await();     } catch (InterruptedException e) {     }    }    item[puter] = x;    System.out.println(Thread.currentThread().getName()   "..."   count        "...put.."   x);    if (puter == item.length - 1) {     puter = -1;     empty.signalAll();    }      count;      puter;    lock.unlock();   }  }   public void take(String x) {   while (true) {    lock.lock();    while (count == 0) {     try {      empty.await();     } catch (InterruptedException e) {     }    }    x = item[taker];    System.out.println(Thread.currentThread().getName()   "..."        (count - 1)   "..take..."   x);    if (taker == item.length - 1) {     taker = -1;     full.signalAll();    }    --count;      taker;    lock.unlock();   }  } }  class PutX implements Runnable {  Resource r;  String x;   PutX(Resource r, String x) {   this.r = r;   this.x = x;  }   public void run() {   r.put(x);  } }  class TakeX implements Runnable {  Resource r;  String x;   TakeX(Resource r, String x) {   this.r = r;   this.x = x;  }   public void run() {   r.take(x);  } } 

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章