国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

利用Condition實現生產者和消費者資源共享

2019-11-08 03:09:31
字體:
來源:轉載
供稿:網友

啥都不說,直接上代碼。

公共資源:

import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * 公共資源,包含消費和生產兩個方法 */public class Basket {    PRivate Lock lock;    private Condition produced;    private Condition consumed;    private int num;    public Basket(){        lock = new ReentrantLock();        produced = lock.newCondition();        consumed = lock.newCondition();    }    public void produce() throws InterruptedException {        lock.lock();        System.out.println("Producer get a lock...");        try {            while(num==1){                System.out.println("Producer sleep...");                consumed.await();                System.out.println("Producer awake...");            }            Thread.sleep(1000);            System.out.println("Producer produce an apple");            num = 1;            produced.signal();        } finally {            lock.unlock();        }    }    public void consume() throws InterruptedException {        lock.lock();        System.out.println("Consumer get a lock...");        try {            while(num == 0){                System.out.println("Consumer sleep...");                produced.await();                System.out.println("Consumer awake...");            }            Thread.sleep(500);            System.out.println("Consumer consume an apple");            num = 0;            consumed.signal();        } finally {            lock.unlock();        }    }}

生產者:

public class Producer implements Runnable {    private Basket basket;    public Producer(Basket basket){        this.basket = basket;    }    @Override    public void run() {        try {            basket.produce();        } catch (InterruptedException e) {            e.printStackTrace();        }    }}消費者:

public class Consumer implements Runnable {    private Basket basket;    public Consumer(Basket basket){        this.basket = basket;    }    @Override    public void run() {        try {            basket.consume();        } catch (InterruptedException e) {            e.printStackTrace();        }    }}測試代碼:

public class BaskerTest {    private static int corePoolSize = 4;    private static int maximumPoolSize = 20;    private static long keepAlive = 100;    public static void main(String[] args) {        Basket basket = new Basket();        ExecutorService service = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAlive, TimeUnit.SECONDS, new LinkedBlockingDeque<Runnable>(20));        //ExecutorService service = Executors.newCachedThreadPool();        for(int i=0;i<3;i++){            service.submit(new Producer(basket));        }        for(int i=0; i<3; i++){            service.submit(new Consumer(basket));        }        service.shutdown();    }}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 苏尼特右旗| 东辽县| 盱眙县| 婺源县| 巴青县| 车致| 泰宁县| 昌江| 玛曲县| 白城市| 贞丰县| 固镇县| 大兴区| 景德镇市| 冀州市| 辉南县| 永德县| 博乐市| 明水县| 山西省| 商丘市| 华安县| 牙克石市| 务川| 甘泉县| 黎城县| 吐鲁番市| 社旗县| 博爱县| 衢州市| 垫江县| 屏东市| 舟山市| 营口市| 左云县| 六盘水市| 南华县| 迁安市| 嘉荫县| 佛坪县| 富平县|