一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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();
  }
 }

}

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人福利在线视频免费观看 | 男人看的网址 | 国产精品高清一区二区三区不卡 | 四虎播放器| 日产乱码卡1卡2卡三免费 | 男人天堂2023 | 欧美视频在线一区二区三区 | 美女禁18| 人妇小说| 激情文学综合网 | 黄片毛片| 欧美日韩1区 | 亚洲福利天堂网福利在线观看 | 欧美一区二区三 | 男女天堂 | 男人天堂官方网站 | 免费永久视频 | 亚洲国产精品综合久久一线 | 好男人免费高清在线观看2019 | 国产日韩一区二区三区在线播放 | 亚洲第五色综合网啪啪 | 国产农村一级特黄α真人毛片 | china精品对白普通话 | 亚洲精品久久久成人 | 免费国产一级 | tobu8中国在线播放免费 | 天天草视频 | 504神宫寺奈绪大战黑人 | 国产成人小视频在线观看 | 国产欧美日韩精品在线 | 日本高清在线看 | 艾秋麻豆果冻剧传媒在线播放 | 国产一区二区免费在线 | 二次元美女互摸隐私互扒 | 亚洲欧美久久婷婷爱综合一区天堂 | 白丝校花被扒开双腿喷水小说 | 国产精品麻豆免费版 | 99热色| 男人天堂官方网站 | brazzers欧美教师 | juy_661佐佐木明希在线播放 |