下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、模塊八 綜合項目實戰(zhàn)案例生產(chǎn)者消費者問題一、案例描述生產(chǎn)者消費者問題是計算機科學(xué)中的經(jīng)典問題,也是程序設(shè)計中經(jīng)常遇到。該問題描述如下:生產(chǎn)者和消費者同時在運行,兩者之間設(shè)置n 個緩沖區(qū),生產(chǎn)者不斷把消息保存到緩沖區(qū)中,消費者則從緩沖區(qū)中獲取消息。生產(chǎn)者和消費者必須保持同步,不允許生產(chǎn)者向一個已裝有消息且尚未取走消息的緩沖區(qū)中保存消息,也不允許消費者從一個空的緩沖區(qū)中獲取消息。產(chǎn)者生產(chǎn)的所有消息,且不會重復(fù)接收同一個消息。才能確保消費者能夠接收到生二、案例要求(1)(2)(3)編寫生產(chǎn)者程序;編寫消費者程序;生產(chǎn)者和消費者之間通過線程實現(xiàn)同步。三、案例實現(xiàn)生產(chǎn)者消費者問題首先必須讓生產(chǎn)者和消費者
2、同時處于運行狀態(tài),即多任務(wù)同時執(zhí)行。Java 允許多個線程同時處于運行狀態(tài),每個線程執(zhí)行自己的任務(wù)。生產(chǎn)者和消費者執(zhí)行不同的操作,因此需要為它們編寫不同的程序。生產(chǎn)者 Producer.java 和消費者 Consumer.java 中通過方法調(diào)用實現(xiàn)了保存消息和獲取消息,顯然,生產(chǎn)者調(diào)用的 read( )和消費者調(diào)用的 write( )必須同步。否則,如果緩沖區(qū)滿了,生產(chǎn)者還要發(fā)送消息,將造成消息的丟失;如果緩沖區(qū)已空,消費者還要獲取消息,也會出錯。public class Producer extends Threadpublic void run()for(i =1;i=10;i+)ra
3、ndom = ()(Math.random()*1000); /產(chǎn)生一個隨機整數(shù)System.out.prln(生產(chǎn)者保存: + random);Buffer.write(random);/把隨機數(shù)保存到緩沖區(qū)中Consumer 通過循環(huán)從緩沖區(qū)中獲取隨機數(shù),每次循環(huán)通過方法調(diào)用獲取,然后在控制臺顯示消費者獲取該隨機數(shù)提示信息。public class Consumer extends Threadpublic void run()for(i =1;i=10;i+)r = Buffer.read();/從緩沖區(qū)中獲取隨機數(shù)System.out.prln(t 消費者獲取: + r);public
4、 class Buffers s s ssic private finalSIZE = 6;ic private ic private ic privateic privatebuffer = newhead = 0;SIZE;/head 指向最前面的消息tail = 0;/tail 指向最后面的消息isFull = false, isEmpty = true;public sic void write(while (isFull)tryn)/緩沖區(qū)滿就一直睡眠Thread.sleep(long) Math.random() * 100);catch (erruptedException e)
5、buffertail = n;tail = (tail+1)%SIZE; if (isEmpty = false)isEmpty = true; if(tail=head)isFull = true;/保存消息/tail 指針后移/如果消費者在睡眠/如果緩沖區(qū)滿public sicread()while (isEmpty)try/緩沖區(qū)空就一直睡眠Thread.sleep(long) Math.random() * 100);catch (erruptedException e)n = bufferhead; head = (head+1)%SIZE; if(isFull)isFull = false; if(head=tail)isEmpty = true;return n;/獲取消息/head 指針后移/如果生產(chǎn)者在睡眠/如果緩沖區(qū)空生產(chǎn)者和消費者實現(xiàn)同步后就可以創(chuàng)建 Producer 和 Consumer 對象實現(xiàn)發(fā)送消息的任務(wù)了。public class ProducerAndConsumerpublic sic void m
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年第一期汽車銷售中介服務(wù)合同的法律條款與消費者權(quán)益保護3篇
- 2025年溫州旅游行業(yè)勞動合同模板(含游客安全保障協(xié)議)3篇
- 二零二五年高空作業(yè)升降車租賃與緊急救援服務(wù)合同3篇
- 2025年度項目部承包文化傳播合同書3篇
- 二零二五年度鍋爐安全閥校驗及保養(yǎng)合同范本3篇
- 2025年度露營基地設(shè)施設(shè)備租賃合同范本4篇
- 二零二五年度農(nóng)產(chǎn)品質(zhì)量安全追溯體系建設(shè)服務(wù)合同3篇
- 二零二五年度綠化工程用草種供應(yīng)及售后保障合同3篇
- 2025年股權(quán)投資基金投資管理顧問合同3篇
- 二零二四圍墻分界范圍界定及土地征收安置服務(wù)合同3篇
- 二零二五年度無人駕駛車輛測試合同免責(zé)協(xié)議書
- 2023中華護理學(xué)會團體標(biāo)準(zhǔn)-注射相關(guān)感染預(yù)防與控制
- PPVT幼兒語言能力測試題附答案
- JB∕T 14089-2020 袋式除塵器 濾袋運行維護技術(shù)規(guī)范
- 陜西省寶雞市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細(xì)及行政區(qū)劃代碼
- 中華人民共和國職業(yè)分類大典電子版
- 畢業(yè)設(shè)計小型液壓機主機結(jié)構(gòu)設(shè)計與計算
- 19XR開機運行維護說明書
- 全國非煤礦山分布
- 臨床研究技術(shù)路線圖模板
- GB∕T 2099.1-2021 家用和類似用途插頭插座 第1部分:通用要求
評論
0/150
提交評論