麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > Java > 正文

Java基于Lock的生產(chǎn)者消費者模型示例

2024-07-14 08:42:09
字體:
供稿:網(wǎng)友

本文實例講述了Java基于Lock的生產(chǎn)者消費者模型。分享給大家供大家參考,具體如下:

前面一篇《Java鎖機(jī)制Lock用法》簡單介紹了鎖機(jī)制,這里進(jìn)一步分析一下基于lock的生產(chǎn)者消費者模型。

package com.expgiga.JUC;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * 生產(chǎn)者消費者案例 */public class TestProductorAndConsumerForLock {  public static void main(String[] args) {    Clerk clerk = new Clerk();    Productor productor = new Productor(clerk);    Consumer consumer = new Consumer(clerk);    new Thread(productor, "生產(chǎn)者A").start();    new Thread(consumer, "消費者B").start();    new Thread(productor, "生產(chǎn)者C").start();    new Thread(consumer, "消費者D").start();  }}//店員class Clerk {  private int product = 0;  private Lock lock = new ReentrantLock();  private Condition condition = lock.newCondition();  //進(jìn)貨方法  public void get() {    lock.lock();    try {      while (product >= 1) { //為了避免虛假喚醒,應(yīng)該總是使用在循環(huán)中        System.out.println("產(chǎn)品已滿!");        try {          condition.await();        } catch (InterruptedException e) {          e.printStackTrace();        }      }      System.out.println(Thread.currentThread().getName() + " : " + ++product);      condition.signalAll();    } finally {      lock.unlock();    }  }  //賣貨方法  public void sale() {    lock.lock();    try {      while (product <= 0) {        System.out.println("產(chǎn)品缺貨!");        try {          condition.await();        } catch (InterruptedException e) {          e.printStackTrace();        }      }      System.out.println(Thread.currentThread().getName() + " : " + --product);      condition.signalAll();    } finally {      lock.unlock();    }  }}//生產(chǎn)者class Productor implements Runnable {  private Clerk clerk;  public Productor(Clerk clerk) {    this.clerk = clerk;  }  @Override  public void run() {    for (int i = 0; i < 20; i++) {      try {        Thread.sleep(200);      } catch (InterruptedException e) {        e.printStackTrace();      }      clerk.get();    }  }}//消費者class Consumer implements Runnable {  private Clerk clerk;  public Consumer(Clerk clerk) {    this.clerk = clerk;  }  @Override  public void run() {    for (int i = 0; i < 20; i++) {      clerk.sale();    }  }}

運行結(jié)果:

產(chǎn)品缺貨!
產(chǎn)品缺貨!
生產(chǎn)者A : 1
消費者B : 0
產(chǎn)品缺貨!
產(chǎn)品缺貨!
生產(chǎn)者C : 1
消費者B : 0
產(chǎn)品缺貨!
產(chǎn)品缺貨!
生產(chǎn)者A : 1
消費者B : 0
產(chǎn)品缺貨!
產(chǎn)品缺貨!
生產(chǎn)者C : 1
消費者B : 0
產(chǎn)品缺貨!
產(chǎn)品缺貨!
生產(chǎn)者A : 1
消費者B : 0
產(chǎn)品缺貨!
產(chǎn)品缺貨!
生產(chǎn)者C : 1
消費者B : 0
產(chǎn)品缺貨!
產(chǎn)品缺貨!
生產(chǎn)者A : 1
消費者B : 0
產(chǎn)品缺貨!
產(chǎn)品缺貨!
生產(chǎn)者C : 1
消費者B : 0
產(chǎn)品缺貨!
產(chǎn)品缺貨!
生產(chǎn)者A : 1
消費者B : 0
產(chǎn)品缺貨!
產(chǎn)品缺貨!
生產(chǎn)者C : 1
消費者B : 0
產(chǎn)品缺貨!
產(chǎn)品缺貨!
生產(chǎn)者A : 1
消費者B : 0
產(chǎn)品缺貨!
產(chǎn)品缺貨!
生產(chǎn)者C : 1
消費者B : 0
產(chǎn)品缺貨!
產(chǎn)品缺貨!
生產(chǎn)者A : 1
消費者B : 0
產(chǎn)品缺貨!
產(chǎn)品缺貨!
生產(chǎn)者C : 1
消費者B : 0
產(chǎn)品缺貨!
產(chǎn)品缺貨!
生產(chǎn)者A : 1
產(chǎn)品已滿!
消費者B : 0
產(chǎn)品缺貨!
產(chǎn)品缺貨!
生產(chǎn)者C : 1
消費者B : 0
產(chǎn)品缺貨!
產(chǎn)品缺貨!
生產(chǎn)者C : 1
產(chǎn)品已滿!
消費者B : 0
產(chǎn)品缺貨!
產(chǎn)品缺貨!
生產(chǎn)者A : 1
消費者B : 0
產(chǎn)品缺貨!
產(chǎn)品缺貨!
生產(chǎn)者C : 1
消費者B : 0
產(chǎn)品缺貨!
產(chǎn)品缺貨!
生產(chǎn)者A : 1
消費者B : 0
產(chǎn)品缺貨!
生產(chǎn)者C : 1
消費者D : 0
產(chǎn)品缺貨!
生產(chǎn)者A : 1
消費者D : 0
產(chǎn)品缺貨!
生產(chǎn)者C : 1
消費者D : 0
產(chǎn)品缺貨!
生產(chǎn)者A : 1
消費者D : 0
產(chǎn)品缺貨!
生產(chǎn)者C : 1
消費者D : 0
產(chǎn)品缺貨!
生產(chǎn)者A : 1
消費者D : 0
產(chǎn)品缺貨!
生產(chǎn)者C : 1
消費者D : 0
產(chǎn)品缺貨!
生產(chǎn)者A : 1
消費者D : 0
產(chǎn)品缺貨!
生產(chǎn)者C : 1
消費者D : 0
產(chǎn)品缺貨!
生產(chǎn)者A : 1
消費者D : 0
產(chǎn)品缺貨!
生產(chǎn)者C : 1
消費者D : 0
產(chǎn)品缺貨!
生產(chǎn)者A : 1
消費者D : 0
產(chǎn)品缺貨!
生產(chǎn)者C : 1
消費者D : 0
產(chǎn)品缺貨!
生產(chǎn)者A : 1
消費者D : 0
產(chǎn)品缺貨!
生產(chǎn)者C : 1
消費者D : 0
產(chǎn)品缺貨!
生產(chǎn)者A : 1
消費者D : 0
產(chǎn)品缺貨!
生產(chǎn)者C : 1
消費者D : 0
產(chǎn)品缺貨!
生產(chǎn)者A : 1
消費者D : 0
產(chǎn)品缺貨!
生產(chǎn)者C : 1
消費者D : 0
產(chǎn)品缺貨!
生產(chǎn)者A : 1
消費者D : 0

希望本文所述對大家java程序設(shè)計有所幫助。


注:相關(guān)教程知識閱讀請移步到JAVA教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 在线播放亚洲视频 | 精品久久久一二三区播放播放播放视频 | 亚洲一区二区三区日本久久九 | 欧美日韩激情 | 在线视频 日韩 | 日本在线国产 | 中文字幕一区久久 | 18pao国产成人免费视频 | 免费毛片a线观看 | 日本网站一区二区三区 | 欧美国产一区二区三区 | 欧美日韩在线视频一区 | 精品一区二区三区在线观看国产 | 亚洲国产精品久久久久久久久久 | 国产精品久久久久无码av | 精品亚洲免费 | 午夜小电影| 国产精品一区二区视频 | 免费在线观看成人av | 成人性生活视频在线观看 | 成人在线免费视频观看 | 看毛片电影 | 国产一区二区精彩视频 | 毛片在线免费播放 | 国产精品自拍av | 久久2019中文字幕 | 精品999www| 亚洲精品久久久久久久久久久 | 91成人免费网站 | 成码无人av片在线观看网站 | 女人久久久www免费人成看片 | 青青草成人免费视频在线 | 国产午夜免费视频 | 成人国产精品免费 | 久久久电影电视剧免费看 | 欧美成人一区免费视频 | 韩国精品一区二区三区四区五区 | 精品国产91久久久久久 | 四虎久草 | 日本aaa一级片 | 欧美成年人在线视频 |