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

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

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java基于Lock的生產者消費者模型示例

Java基于Lock的生產者消費者模型示例

2021-05-27 13:59u013063153 Java教程

這篇文章主要介紹了Java基于Lock的生產者消費者模型,結合實例形式分析了java基于鎖機制的生產者消費者模型相關實現與使用技巧,需要的朋友可以參考下

本文實例講述了java基于lock的生產者消費者模型。分享給大家供大家參考,具體如下:

前面一篇《java鎖機制lock用法》簡單介紹了鎖機制,這里進一步分析一下基于lock的生產者消費者模型。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package com.expgiga.juc;
import java.util.concurrent.locks.condition;
import java.util.concurrent.locks.lock;
import java.util.concurrent.locks.reentrantlock;
/**
 * 生產者消費者案例
 */
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, "生產者a").start();
    new thread(consumer, "消費者b").start();
    new thread(productor, "生產者c").start();
    new thread(consumer, "消費者d").start();
  }
}
//店員
class clerk {
  private int product = 0;
  private lock lock = new reentrantlock();
  private condition condition = lock.newcondition();
  //進貨方法
  public void get() {
    lock.lock();
    try {
      while (product >= 1) { //為了避免虛假喚醒,應該總是使用在循環中
        system.out.println("產品已滿!");
        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("產品缺貨!");
        try {
          condition.await();
        } catch (interruptedexception e) {
          e.printstacktrace();
        }
      }
      system.out.println(thread.currentthread().getname() + " : " + --product);
      condition.signalall();
    } finally {
      lock.unlock();
    }
  }
}
//生產者
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();
    }
  }
}

運行結果:

產品缺貨!
產品缺貨!
生產者a : 1
消費者b : 0
產品缺貨!
產品缺貨!
生產者c : 1
消費者b : 0
產品缺貨!
產品缺貨!
生產者a : 1
消費者b : 0
產品缺貨!
產品缺貨!
生產者c : 1
消費者b : 0
產品缺貨!
產品缺貨!
生產者a : 1
消費者b : 0
產品缺貨!
產品缺貨!
生產者c : 1
消費者b : 0
產品缺貨!
產品缺貨!
生產者a : 1
消費者b : 0
產品缺貨!
產品缺貨!
生產者c : 1
消費者b : 0
產品缺貨!
產品缺貨!
生產者a : 1
消費者b : 0
產品缺貨!
產品缺貨!
生產者c : 1
消費者b : 0
產品缺貨!
產品缺貨!
生產者a : 1
消費者b : 0
產品缺貨!
產品缺貨!
生產者c : 1
消費者b : 0
產品缺貨!
產品缺貨!
生產者a : 1
消費者b : 0
產品缺貨!
產品缺貨!
生產者c : 1
消費者b : 0
產品缺貨!
產品缺貨!
生產者a : 1
產品已滿!
消費者b : 0
產品缺貨!
產品缺貨!
生產者c : 1
消費者b : 0
產品缺貨!
產品缺貨!
生產者c : 1
產品已滿!
消費者b : 0
產品缺貨!
產品缺貨!
生產者a : 1
消費者b : 0
產品缺貨!
產品缺貨!
生產者c : 1
消費者b : 0
產品缺貨!
產品缺貨!
生產者a : 1
消費者b : 0
產品缺貨!
生產者c : 1
消費者d : 0
產品缺貨!
生產者a : 1
消費者d : 0
產品缺貨!
生產者c : 1
消費者d : 0
產品缺貨!
生產者a : 1
消費者d : 0
產品缺貨!
生產者c : 1
消費者d : 0
產品缺貨!
生產者a : 1
消費者d : 0
產品缺貨!
生產者c : 1
消費者d : 0
產品缺貨!
生產者a : 1
消費者d : 0
產品缺貨!
生產者c : 1
消費者d : 0
產品缺貨!
生產者a : 1
消費者d : 0
產品缺貨!
生產者c : 1
消費者d : 0
產品缺貨!
生產者a : 1
消費者d : 0
產品缺貨!
生產者c : 1
消費者d : 0
產品缺貨!
生產者a : 1
消費者d : 0
產品缺貨!
生產者c : 1
消費者d : 0
產品缺貨!
生產者a : 1
消費者d : 0
產品缺貨!
生產者c : 1
消費者d : 0
產品缺貨!
生產者a : 1
消費者d : 0
產品缺貨!
生產者c : 1
消費者d : 0
產品缺貨!
生產者a : 1
消費者d : 0

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

原文鏈接:https://blog.csdn.net/u013063153/article/details/76407240

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 国产成人在线视频 | 国产精品久久久久久久不卡 | 国产日产久久久久久 | 久久精品久久精品国产大片 | 国产日本欧美在线观看 | 久久福利精品 | 黄色特级视频 | 国产精品av久久久久久网址 | 亚洲性爰 | fc2国产成人免费视频 | 成人羞羞网站入口 | 狠狠操精品视频 | 在线观看免费毛片视频 | 日本免费靠逼视频 | 一区二区三区在线观看av | 成年人视频免费看 | 欧美成人激情 | 欧美精品在线免费观看 | 欧美精品成人一区二区在线观看 | 精品国产一级毛片 | 日本一区二区在线 | 鲁丝片一区二区三区免费入口 | 日本一区二区不卡在线观看 | 久久久久久久久亚洲精品 | 亚洲少妇诱惑 | 在线亚洲欧美日韩 | 99re热精品视频 | 激情网站在线观看 | 国产一区二区三区视频免费 | 日韩黄色免费电影 | chinesehdxxxx无套 久久另类视频 | 一级黄色片武则天 | av在线播放亚洲 | 日本在线播放一区二区 | 久久久久久久久浪潮精品 | 亚洲精久 | 日韩精品免费一区二区三区 | 成人做爽爽爽爽免费国产软件 | javhdfreejaⅴhd| 99久久久精品国产一区二区 | 欧美日韩国产中文字幕 |