日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线程同步之经典生产者-消费者模型

發布時間:2025/5/22 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线程同步之经典生产者-消费者模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/* 線程同步之生產者-消費者模型 該模型符合以下要求: 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

總結

以上是生活随笔為你收集整理的线程同步之经典生产者-消费者模型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。