国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Lock、Condition實現簡單的生產者消費者模式示例

Lock、Condition實現簡單的生產者消費者模式示例

2019-11-19 14:31Java教程網 JAVA教程

這篇文章主要介紹了Lock、Condition實現簡單的生產者消費者模式示例,需要的朋友可以參考下

代碼如下:


package condition;

 

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;


/**
 * 利用Lock、Condition實現生產者消費者模式
 * @author will
 *
 */
public class ProducerConsumerDemo {

 public static void main(String[] args) {
  int producerCount = 10;
  int consumerCount = 15;

  final ProducerConsumerDemo pcd = new ProducerConsumerDemo(5);   // 緩沖區大小為5

  Thread[] producerThreads = new Thread[producerCount];
  for(int i = 0; i < producerCount; i++) {
   producerThreads[i] = new Thread("producer" + (i+1)) {

    @Override
    public void run() {
     pcd.produce();
    }
   };
  }

  Thread[] consumerThreads = new Thread[consumerCount];
  for(int j = 0; j < consumerCount; j++) {
   consumerThreads[j] = new Thread("consumer" + (j+1)) {
    @Override
    public void run() {
     pcd.consume();
    }
   };
  }

  // 啟動生產者消費者線程
  for(int i = 0; i < producerCount; i++) {
   producerThreads[i].start();
  }
  for(int j = 0; j < consumerCount; j++) {
   consumerThreads[j].start();
  }
 }

 private static final int DEFAULT_BUFFER_SIZE = 10;
 private int bufferSize;   // 緩沖區大小
 private List<Object> bufferList;

 private final Lock lock = new ReentrantLock(true);
 private final Condition condition = lock.newCondition();

 public ProducerConsumerDemo(int bufferSize) {
  this.bufferSize = bufferSize > 0 ? bufferSize : DEFAULT_BUFFER_SIZE;
  bufferList = new ArrayList<Object>(bufferSize);
 }

 // 生產
 public void produce() {
  lock.lock();   // 加鎖
  try {
   while(bufferList.size() == bufferSize) {   // 緩沖區滿了
    System.out.println("Producer wait, thread: " + Thread.currentThread().getName());
    condition.await();
   }

   // 生產
   bufferList.add(new Object());
   System.out.println("Producer produce one, now buffer size: " 
     + bufferList.size() + ", and thread: " + Thread.currentThread().getName());
   condition.signalAll();   // 通知消費者
  } catch(InterruptedException e) {
   e.printStackTrace();
  } finally {
   lock.unlock();
  }
 }

 // 消費
 public void consume() {
  lock.lock();   // 加鎖
  try {
   while(bufferList.isEmpty()) {   // 緩沖區空了
    System.out.println("Consumer wait, thread: " + Thread.currentThread().getName());
    condition.await();
   }

   // 消費
   bufferList.remove(0);   // 從鏈表頭部移除一個
   System.out.println("Consumer consumer one, now buffer size: " 
     + bufferList.size() + ", and thread: " + Thread.currentThread().getName());
   condition.signalAll();
  } catch(InterruptedException e) {
   e.printStackTrace();
  } finally {
   lock.unlock();
  }
 }

}

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美激情一区二区 | 欧美日韩综合一区 | 婷婷中文字幕 | 黄片毛片在线观看 | 亚洲第一成人久久网站 | 激情视频日本 | 国产精品免费看 | 中文字幕免费 | 日本精品一区二区三区视频 | 夜夜夜操| 国产人成在线观看 | 青青久在线视频 | 一级片免费视频 | 成人在线中文字幕 | 成人在线小视频 | 欧美午夜一区二区三区免费大片 | 色片视频免费 | 亚洲一区二区三区免费观看 | 中国成人免费视频 | 中文字幕在线免费观看 | 桃色一区| 日本一区二区视频 | 国产日韩久久 | 成人免费色 | 国产色黄视频 | 日韩精品无码一区二区三区 | 亚洲乱码国产乱码精品精98午夜 | 狠狠干最新网址 | 欧美在线视频网 | 欧美一区二区精品 | 日本一区二区高清视频 | 中文av在线播放 | 色中色av | 日韩欧美专区 | 欧美成人精品一区二区男人看 | 麻豆av在线播放 | 亚洲一区二区三区四区五区中文 | 国产精品久久精品 | 一级黄色免费网站 | 欧美大片免费在线观看 | 在线国产一区二区 |