37256-軟件開發(fā)與項目管理-模塊案例生產(chǎn)者消費者問題_第1頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論