线程同步之经典生产者-消费者模型
生活随笔
收集整理的這篇文章主要介紹了
线程同步之经典生产者-消费者模型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/*
線程同步之生產者-消費者模型
該模型符合以下要求:
1、生產者只在倉儲未滿時生產,倉滿則停止生產;
2、消費者只在倉儲未空時消費,倉空則等待;
3、當消費者發現倉儲為空時則通知生產者生產;
4、生產者在生產出可消費產品時則通知消費者來消費;
*/ 1 package one;
2 class Go{
3 public static final int MAX_NUM=100;//最大庫存量
4 private int currennum;//當前庫存
5 Go(){}
6 Go(int currennum){
7 this.currennum=currennum;
8 }
9 public synchronized void produce(int neednum){
10 System.out.println("要生產的產品數量"+neednum+"與現有倉儲靚之和大于最大倉儲量"+MAX_NUM+",所以不能生產!!");
11 while(currennum+neednum>MAX_NUM){
12 try {
13 this.wait();//使當前線程阻塞,并釋放鎖
14 } catch (InterruptedException e) {
15 // TODO Auto-generated catch block
16 e.printStackTrace();
17 }
18 }
19 currennum+=neednum;
20 System.out.println("已經生產了"+neednum+",現在倉儲量為:"+currennum);
21 this.notifyAll();//不釋放鎖,也不獲得鎖,僅通知其他線程可以競爭執行
22 }
23 public synchronized void consum(int neednum){
24 while(currennum<neednum){
25 System.out.println("現有倉儲量不足,無法消費!!");
26 try {
27 this.wait();
28 } catch (InterruptedException e) {
29 // TODO Auto-generated catch block
30 e.printStackTrace();
31 }
32 }
33 currennum-=neednum;
34 System.out.println("已經消費了"+neednum+",現在倉儲量為:"+currennum);
35 this.notifyAll();
36 }
37 }
38 class Producer extends Thread{
39 private int neednum;
40 private Go go;
41 Producer(int neednum,Go go){
42 this.neednum=neednum;
43 this.go=go;
44 }
45 public void run(){
46 go.produce(neednum);
47 }
48 }
49 class Consumer extends Thread{
50 private int neednum;
51 private Go go;
52 Consumer(int neednum,Go go){
53 this.neednum=neednum;
54 this.go=go;
55 }
56 public void run(){
57 go.consum(neednum);
58 }
59 }
60 public class Practice extends Thread{
61 public static void main(String[] args){
62 Go go=new Go(30);
63 new Consumer(50,go).start();
64 new Consumer(20,go).start();
65 new Consumer(30,go).start();
66 new Producer(10,go).start();
67 new Producer(10,go).start();
68 new Producer(10,go).start();
69 new Producer(10,go).start();
70 new Producer(10,go).start();
71 new Producer(80,go).start();
72 }
73 }
摘自:http://blog.csdn.net/kutekute/article/details/8071421
轉載于:https://www.cnblogs.com/XL-Liang/archive/2013/04/09/3009451.html
總結
以上是生活随笔為你收集整理的线程同步之经典生产者-消费者模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CenterWindow()的用法
- 下一篇: linux中select()函数分析