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

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

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

服務器之家 - 編程語言 - Java教程 - Java 生產者/消費者問題實例詳解

Java 生產者/消費者問題實例詳解

2020-09-13 12:08wbb Java教程

這篇文章主要實例分析了java中生產者消費者問題的方法,需要的朋友可以可以參考下

生產者和消費者問題是線程模型中的經典問題:生產者和消費者在同一時間段內共用同一個存儲空間,如下圖所示,生產者向空間里存放數據,而消費者取用數據,如果不加以協調可能會出現以下情況:

存儲空間已滿,而生產者占用著它,消費者等著生產者讓出空間從而去除產品,生產者等著消費者消費產品,從而向空間中添加產品。互相等待,從而發生死鎖。

Java 生產者/消費者問題實例詳解

以下實例演示了如何通過線程解決生產者/消費者問題:

?
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
/*
 author by w3cschool.cc
 ProducerConsumerTest.java
 */
public class ProducerConsumerTest {
  public static void main(String[] args) {
   CubbyHole c = new CubbyHole();
   Producer p1 = new Producer(c, 1);
   Consumer c1 = new Consumer(c, 1);
   p1.start();
   c1.start();
  }
}
class CubbyHole {
  private int contents;
  private boolean available = false;
  public synchronized int get() {
   while (available == false) {
     try {
      wait();
     }
     catch (InterruptedException e) {
     }
   }
   available = false;
   notifyAll();
   return contents;
  }
  public synchronized void put(int value) {
   while (available == true) {
     try {
      wait();
     }
     catch (InterruptedException e) {
     }
   }
   contents = value;
   available = true;
   notifyAll();
  }
}
class Consumer extends Thread {
  private CubbyHole cubbyhole;
  private int number;
  public Consumer(CubbyHole c, int number) {
   cubbyhole = c;
   this.number = number;
  }
  public void run() {
   int value = 0;
     for (int i = 0; i < 10; i++) {
      value = cubbyhole.get();
      System.out.println("消費者 #" + this.number+ " got: " + value);
     }
  }
}
class Producer extends Thread {
  private CubbyHole cubbyhole;
  private int number;
  public Producer(CubbyHole c, int number) {
   cubbyhole = c;
   this.number = number;
  }
  public void run() {
   for (int i = 0; i < 10; i++) {
     cubbyhole.put(i);
     System.out.println("生產者 #" + this.number + " put: " + i);
     try {
      sleep((int)(Math.random() * 100));
     } catch (InterruptedException e) { }
   }
  }
}

以上代碼運行輸出結果為:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
消費者 #1 got: 0
生產者 #1 put: 0
生產者 #1 put: 1
消費者 #1 got: 1
生產者 #1 put: 2
消費者 #1 got: 2
生產者 #1 put: 3
消費者 #1 got: 3
生產者 #1 put: 4
消費者 #1 got: 4
生產者 #1 put: 5
消費者 #1 got: 5
生產者 #1 put: 6
消費者 #1 got: 6
生產者 #1 put: 7
消費者 #1 got: 7
生產者 #1 put: 8
消費者 #1 got: 8
生產者 #1 put: 9
消費者 #1 got: 9

希望本篇文章對您有所幫助

原文鏈接:http://www.2cto.com/kf/201601/486921.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 涩涩99 | a视频在线看 | 成年人网站视频免费 | 午夜在线小视频 | 久久嗨 | 久久久久久中文字幕 | 在线91视频 | 在线播放免费人成毛片乱码 | 国产亚洲精品综合一区 | 国产精品成人久久久久a级 欧美特黄一级高清免费的香蕉 | 久久最新免费视频 | 国产九九热视频 | 久操福利视频 | 7777在线视频免费播放 | 一级做a爰性色毛片免费 | 国产91小视频在线观看 | 国产妇女乱码一区二区三区 | 久久综合综合 | 久久久久久久久久综合 | 国产免费传媒av片在线 | 99ri在线| 伊人亚洲精品 | 男女一边摸一边做羞羞视频免费 | 久久日韩在线 | 激情网站免费观看 | 天天夜夜草| 久久久久性视频 | 欧美一级二级毛片视频 | 久色乳综合思思在线视频 | 国产精品99久久久久久宅女 | 欧美在线成人影院 | 成人性生活视频在线观看 | 久久亚洲精品久久国产一区二区 | 香蕉视频1024 | 国产日韩三区 | 中文字幕一区二区三区久久 | 在线观看国产一区二区 | 一二区电影 | 久久精品视频网址 | 欧美一区二区三区中文字幕 | 免费黄色小网站 |