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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

java的知识点34——线程通信 || 生产者与消费者问题

發布時間:2025/4/16 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java的知识点34——线程通信 || 生产者与消费者问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

線程通信

應用場景:生產者和消費者問題
? 假設倉庫中只能存放一件產品,生產者將生產出來的產品放入倉庫,消費者將倉庫中產品取走消費
? 如果倉庫中沒有產品,則生產者將產品放入倉庫,否則停止生產并等待,直到倉庫中的產品被消費者取走為止
? 如果倉庫中放有產品,則消費者可以將產品取走消費,否則停止消費并等待,直到倉庫中再次放入產品為止

? ? ? ? ? ? ??

分析
? 這是一個線程同步問題,生產者和消費者共享同一個資源,并且生產者和消費者之間相互依賴,互為條件
? 對于生產者,沒有生產產品之前,要通知消費者等待。而生產了產品之后,又需要馬上通知消費者消費
? 對于消費者,在消費之后,要通知生產者已經消費結束,需要繼續生產新產品以供消費
? 在生產者消費者問題中,僅有synchronized是不夠的
? synchronized可阻止并發更新同一個共享資源實現了同步
? synchronized不能用來實現不同線程之間的消息傳遞(通信)


Java提供了3個方法解決線程之間的通信問題


線程通信解決方式一:

并發協作模型“生產者/消費者模式” ——》管程法

生產者:?生產者指的是負責生產數據的模塊(這里模塊可能是:方法、對象、線程、進程)

消費者:?消費者指的是負責處理數據的模塊(這里模塊可能是:方法、對象、線程、進程)

緩沖區:?消費者不能直接使用生產者的數據,它們之間有個“緩沖區”。生產者將生產好的數據放入“緩沖區”,消費者從“緩沖區”拿要處理的數據

緩沖區是實現并發的核心,緩沖區的設置有3個好處:

實現線程的并發協作

? ? ??有了緩沖區以后,生產者線程只需要往緩沖區里面放置數據,而不需要管消費者消費的情況;同樣,消費者只需要從緩沖區拿數據處理即可,也不需要管生產者生產的情況。 這樣,就從邏輯上實現了“生產者線程”和“消費者線程”的分離。

解耦了生產者和消費者

? ? ??生產者不需要和消費者直接打交道。

解決忙閑不均,提高效率

? ? ??生產者生產數據慢時,緩沖區仍有數據,不影響消費者消費;消費者處理數據慢時,生產者仍然可以繼續往緩沖區里面放置數據?


協作模型:生產者消費者實現方式一:管程法? ? 借助緩沖區

/*** 協作模型:生產者消費者實現方式一:管程法* 借助緩沖區* @author Administrator**/ public class CoTest01 {public static void main(String[] args) {SynContainer container=new SynContainer();new Productor(container).start();new Consumer(container).start();} } //生產者 class Productor extends Thread{SynContainer container;public Productor(SynContainer container) {this.container = container;}@Overridepublic void run() {//生產for(int i=1;i<=20;i++) {System.out.println("生產第--》"+i+"個饅頭");container.push(new Steamedbun(i));}} } //消費者 class Consumer extends Thread{SynContainer container;public Consumer(SynContainer container) {this.container = container;}public void run() {//消費for(int i=1;i<=20;i++) {System.out.println("消費第-->"+container.pop().id+"個饅頭");}} } //緩沖區 class SynContainer{Steamedbun[] buns=new Steamedbun[10]; //存儲容器int count=0; //計數器 // 存儲 生產public synchronized void push(Steamedbun bun) {//何時能生產 容器存在空間//不能生產 只能等待if(count == buns.length) {System.out.println("------"+buns.length+"-----------");try {this.wait(); //線程阻塞 消費者通知生產解除} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} }//存在空間 可以生產 // //先指向空的,再放東西進去。 放一個東西,計數加1 這樣做是錯誤的,因為導致count計數不一致 // count++; // buns[count]=bun;buns[count]=bun;count++;//存在數據了,可以通知消費啦this.notifyAll();}//獲取 消費public synchronized Steamedbun pop() {//何時消費 容器中是否存在數據//沒有數據 只有等待if(count==0) {try {this.wait(); //線程阻塞 生產者通知消費解除} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} }//存在數據可以消費count--;Steamedbun bun=buns[count];this.notifyAll(); //存在空間了,可以喚醒對方生產了return bun;} } //饅頭 class Steamedbun{int id;public Steamedbun(int id) {this.id=id;} }

? ? ? ? ? ? ? ? ??? ?為什么有這種情況????

總結

以上是生活随笔為你收集整理的java的知识点34——线程通信 || 生产者与消费者问题的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 一区二区三区高清 | 久久精品视频在线免费观看 | 波多野结衣喷潮 | 日本精品视频一区二区 | 少妇做爰k8经典 | 中文字幕高清一区 | 色涩视频在线观看 | 一级黄av | 美女一二三区 | 欧洲视频一区二区三区 | 午夜激情欧美 | 久久综合婷婷 | 亚洲少妇毛片 | 操穴网站| 肉视频在线观看 | 丁香花电影免费播放电影 | 亚洲逼院| 2021狠狠干 | 亚洲精品中文字幕 | 大桥未久av一区二区三区中文 | 欧美综合在线观看 | 日日舔夜夜摸 | 日韩91 | 黄色av网址在线 | 久久爱99| 日韩无套无码精品 | 精品日韩欧美 | 欧美性色黄大片手机版 | 蜜桃臀一区二区三区 | av专区在线 | 伊人久久大香线蕉综合网站 | 午夜久久剧场 | 欧洲一区二区三区在线 | 久久永久免费 | 欧洲性猛交 | 亚洲熟女乱综合一区二区 | 亚洲欧美系列 | 欧美图片一区 | 亚洲成年人免费观看 | 亚洲精品一区在线观看 | 吸咬奶头狂揉60分钟视频 | 久久亚洲第一 | 艳妇臀荡乳欲伦交换在线播放 | 九九久久视频 | 中国老头性行为xxxx | 黄色a级片在线观看 | 久久久一级黄色片 | 村上凉子av | 欧美国产日韩在线视频 | 青青操狠狠干 | 亚洲视频久久 | 91免费网站视频 | 夜夜操天天爽 | 日日夜夜网站 | 在线看欧美 | 久久亚洲av成人无码国产电影 | 一级片一级片 | 老女人一毛片 | av黄色在线免费观看 | 一区二区日韩视频 | 日本中文字幕在线播放 | 亚洲精品一区二区三区婷婷月 | 毛片视频网站在线观看 | 在线一区二区三区四区 | 国产欧美久久久 | 女人又爽又黄免费女仆 | 国产女人和拘做受视频免费 | 国产香蕉精品 | 成年人免费av| 无码人妻丰满熟妇啪啪欧美 | 精品久久99 | 伊人影音 | 中文字幕三级 | 亚洲精品中文字幕在线播放 | 精品视频成人 | 亚洲色图在线视频 | 亚洲看| 欧美浪妇xxxx高跟鞋交 | 午夜播放 | 黄色香蕉软件 | 日韩精品色哟哟 | 日韩亚洲欧美综合 | 亚洲日本韩国在线 | 在线观看中文字幕码 | 久久久久久久偷拍 | 国产久精品 | 毛茸茸多毛bbb毛多视频 | 欧美丝袜脚交 | 日韩精品视频播放 | 日本在线视频一区 | h片在线观看视频 | 精品福利一区二区三区 | 在线岛国 | 欧美性受xxxx狂喷水 | 狠狠香蕉| 黄色网页免费在线观看 | 亚洲国产成| 色视频导航 | 韩国黄色网址 |