激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

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

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - Lock、Condition實(shí)現(xiàn)簡(jiǎn)單的生產(chǎn)者消費(fèi)者模式示例

Lock、Condition實(shí)現(xiàn)簡(jiǎn)單的生產(chǎn)者消費(fèi)者模式示例

2019-11-19 14:31Java教程網(wǎng) JAVA教程

這篇文章主要介紹了Lock、Condition實(shí)現(xiàn)簡(jiǎn)單的生產(chǎn)者消費(fèi)者模式示例,需要的朋友可以參考下

代碼如下:


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實(shí)現(xiàn)生產(chǎn)者消費(fèi)者模式
 * @author will
 *
 */
public class ProducerConsumerDemo {

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

  final ProducerConsumerDemo pcd = new ProducerConsumerDemo(5);   // 緩沖區(qū)大小為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();
    }
   };
  }

  // 啟動(dòng)生產(chǎn)者消費(fèi)者線程
  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;   // 緩沖區(qū)大小
 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);
 }

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

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

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

   // 消費(fèi)
   bufferList.remove(0);   // 從鏈表頭部移除一個(gè)
   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();
  }
 }

}

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91高清国产视频 | 成人在线视频黄色 | 欧美韩国一区 | 久久免费激情视频 | 亚洲一区二区三区91 | 嫩草www | 日韩精品hd | 国产一级小视频 | 一级看片免费视频 | 视频一区免费观看 | 国产一区二区三区四 | 国产午夜精品一区 | 成人久久精品 | 91短视频在线播放 | 欧美综合日韩 | 免费播放av| 九九热在线视频免费观看 | 国产精品高潮99久久久久久久 | 国产伦久视频免费观看视频 | 91福利影视 | 国产精品久久久久免费视频 | 男女羞羞视频 | 成人做爰www免费看 欧美精品免费一区二区三区 | 91美女视频在线观看 | 国产一区二区三区在线观看视频 | 久久国产精品影视 | 免费国产在线视频 | 操操插插 | 91精品国产九九九久久久亚洲 | 国产在线第一区 | 中文字幕电影免费播放 | 久久久久久久久淑女av国产精品 | 国产精品观看在线亚洲人成网 | 日韩一级片免费 | 国产午夜精品久久久久婷 | 日本成人一区二区 | 欧美一级做性受免费大片免费 | 亚洲 91| 91精品欧美一区二区三区 | 国产羞羞视频在线免费观看 | 男人久久天堂 |