




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、精品文檔河北建筑工程學院實驗報告年 月 日班級物 聯142姓名孫勝杰學號20143260218評分實驗臺號同組人員實驗名稱經典進程同步問題-生產者消 費者問題模擬實現課程名稱操作系統儀器名稱型號規格儀器編號裝后eclipse軟件和Java開發環境的PC機一實驗目的1深刻理解進程同步的概念。2掌握經典同步問題,生產者一一消費者問題。二實驗設備PC機三實驗內容在Java開發環境下模擬經典進程同步問題,生產者一一消費者問題。四程序的主要代碼package生產者與消費者問題;import java.util.LinkedList;import java.util.Scanner;class Stora
2、ge /倉庫最大存儲量private final int MAX_SIZE = 100;1歡在下載精品文檔new/倉庫存儲的載體newprivate LinkedList list =LinkedList();/ 生產皿小產品public void produce( int num)/同步代碼段synchronized (list) /如果倉庫剩余容量不足while (list.size() + num MAX_SIZE) System.out .println(要生產的產品數量:+ num +t庫存量:+ list.size() +t暫時不能執行生產任務!);System.out.print
3、ln(進行生產操作(1),還是消費操作(0)?);try/由于條件不滿足,生產阻塞2歡在下載精品文檔list.wait();)catch (InterruptedException e)(e.printStackTrace();)/生產條件滿足情況下,生產num產品for ( int i = 1; i = num; +i)(list.add(new Object();)System. out.println( 已經生產產品數:+ num + t 現 庫存量:+ list.size();System. out.println( 進行生產操作(1),還是消費操作 (0)?);list.notify
4、All();3歡在下載精品文檔)/消費nunr產品 public void consume(int num) (/同步代碼段 synchronized (list) (/如果倉庫存儲量不足 while (list.size() num) (System.out .println( 要消費的產品數量:+ num + t庫存量: + list.size() + t暫時不能執行生產任務!”);System.out.println( 進行生產操作(1),還是消費操 作(0)?);try(/由于條件不滿足,消費阻塞list.wait();4歡在下載精品文檔)catch (InterruptedExcep
5、tion e)(e.printStackTrace();)/消費條件滿足情況下,消費num仆產品for ( int i = 1; i = num; +i)( list.remove();)System. out.println(已經消費產品數:+ num + t 現庫存量為:+ list.size();System. out.println(進行生產操作(1),還是消費操作(0)?);list.notifyAll();)5歡在下載精品文檔/ get/set 方法public LinkedList getList()( return list;public void setList(Linked
6、List list)(this .list = list;public int getMAX_SIZE()( return MAX_SIZE;/生產者類Producer繼承線程類Thread class Producer extends Thread(/每次生產的產品數量6歡立下載精品文檔private int num;/所在放置的倉庫 private Storage storage;/構造函數,設置倉庫public Producer(Storage storage)(this .storage = storage;/線程run函數 public void run()(produce(num)
7、;/調用倉庫Storage的生產函數 public void produce( int num) (duce(num);7歡立下載精品文檔/ get/set 方法public int getNum()(return num;)public void setNum( int num)(this .num = num;)public Storage getStorage()(return storage;)public void setStorage(Storage storage)(this .storage = storage;)8歡立下載精品文檔消費者類Consume繼承線程類Threadc
8、lass Consumer extends Thread(/每次消費的產品數量private int num;/所在放置的倉庫private Storage storage;/構造函數,設置倉庫public Consumer(Storage storage)(this .storage = storage;/線程run函數public void run()(consume(num);9歡立下載精品文檔/調用倉庫Storage的生產函數 public void consume(int num)(storage.consume(num);/ get/set 方法public int getNum(
9、)(return num;public void setNum( int num)(this .num = num;public Storage getStorage()(return storage;10欠0迎下載精品文檔public void setStorage(Storage storage)(this .storage = storage;) public class ProducerAndConsumer(public static void main(String args)(/倉庫對象Storage storage = newStorage();/生產者對象Producer p
10、1 =newProducer(storage);Producer p2 =newProducer(storage);Producer p3 =newProducer(storage);Producer p4 =newProducer(storage);Producer p5 =newProducer(storage);Producer p6 =newProducer(storage);1欺速下載精品文檔Producer p7 = newProducer(storage);Producer p8= newProducer(storage);Producer p9 = newProducer(st
11、orage);Producer p10 = new Producer(storage);/消費者對象Consumer c1 = newConsumer(storage);Consumer c2 = newConsumer(storage);Consumer c3 = newConsumer(storage);Consumer c4 = newConsumer(storage);Consumer c5 = newConsumer(storage);Consumer c6 = newConsumer(storage);Consumer c7 = newConsumer(storage);Consu
12、mer c8 = newConsumer(storage);Consumer c9 = newConsumer(storage);Consumer c10 = new Consumer(storage);System.out .println(已生產產品數量:0t已消費產品數量:0t庫存量:0t最大存儲空間:100”);System.out.println(進行生產操作(1),還是消費操作(0)?);12欠迎下載精品文檔Scanner isProduer= newScanner(System. in );for (int i =1;i10;i+)/System.out.println(進行生產
13、操作(1),還是消費操作(0)?); if (isProduer.nextInt()=1)System.out .print(請輸入要生產的產品數量:);Scanner p11 = newScanner(System. in );if (i=1)p1.setNum(p11.nextInt();p1.start();else if (i=2)p2.setNum(p11.nextInt();p2.start();else if (i=3)p3.setNum(p11.nextInt();p3.start();else if (i=4)p4.setNum(p11.nextInt();13欠0迎下載精品
14、文檔p4.start();)else if (i=5)p5.setNum(p11.nextInt();p5.start();else if (i=6)p6.setNum(p11.nextInt();p6.start();else if (i=7)p7.setNum(p11.nextInt();p7.start();else if (i=8)p8.setNum(p11.nextInt();p8.start();else if (i=9)p9.setNum(p11.nextInt();p9.start();else if (i=10)p10.setNum(p11.nextInt();14欠迎下載精
15、品文檔p10.start();) else System.out .print(請輸入要消費的產品數量:);Scanner p12= newScanner(System. in );if (i=1)c1.setNum(p12.nextInt();c1.start();else if (i=2)c2.setNum(p12.nextInt();c2.start();else if (i=3)c3.setNum(p12.nextInt();c3.start();else if (i=4)c4.setNum(p12.nextInt();c4.start();i微迎下載精品文檔)else if (i=5
16、)c5.setNum(p12.nextInt();c5.start();else if (i=6)c6.setNum(p12.nextInt();c6.start();else if (i=7)c7.setNum(p12.nextInt();c7.start();else if (i=8)c8.setNum(p12.nextInt();c8.start();else if (i=9)c9.setNum(p12.nextInt();c9.start();else if (i=10)c10.setNum(p12.nextInt();c10.start();16攵迎下載精品文檔)五、實驗結果本程序應
17、用Java軟件開發,沒有引入界面,需要使用可以運行java的eclipse 等軟件運行。程序目錄為:生產者與消費者問題 生產者消費者問題代碼生產者與消費者問題 下的ProducerAndConsumer.java文件。程序運行后,界面如圖所示:當輸入1時,顯示如下:精品文檔快速即可有e Java TOC o 1-5 h z 士 IrS Jmdoc .日控1吉工 qy UflCat. | :二.|A 口與挈 |r*6,E* 同ProducerAndConsumer JavaC:PrOgram FiksJdVdjdk1.8.0 74ifivafw.&K& (20161 已生產產品數量:0已清薪產品
18、耕j:0 度存量充。昂大存健宅就100%進行生產操作以小迂是消費操作孤?同式請福入要生產的產品數量,Q -現在輸入要生產的產品數量快遞西同珍利Java TOC o 1-5 h z :問題 標jvads 被朋 日校4吉 二 ,曲贊 #LogCit|3 公,- *& v- *3*r*FjProducerAndCcxisumer (Java K=程序C: Program 日足avW. dk8.0 74bin javaw.exe (2C 161 - 己生產產品裁量:口已摘費產品鉀量:口庫存量I 0量大存儲空端100 迸行生產操作tl),還是消費操作悌17理* 清埔人要生產的產品政量;其.己蛭生產產品斜
19、;2。度率存量:20諾行生產操作(1).還是清費操作(Qb?! 中一直重復該操作,直至如圖情況:18欠0迎下載精品文檔快速電汽|百取Java ,向航號總vadoc艮朝 日控制白金 對講際 *gg匚京f_占 X,I,口礦萬,* 0 * H * 同ProducerAndCcnsumer Java 應用程序CProgram *辰?”村dklEO74Wn串tvaw.exc (20161 * TOC o 1-5 h z 己生產產品數量:U己消費產品裁量:g隹存量:。最大存儲空瓦100工透行生產操作門),還是梢費操作f。?e4清箱人要生產的產品數量二11-已經生產產品敵:20現庫存量:2。金進行生產悔作門
20、),還是消篤操作01?日1%清輸入夔生產的產品數量門um已經生存產品故:m?,F庫存黃:5。 進行生產操和門),還是消費慳作(0:? 請箱人要生產的產品數量二1g.已經生產產品敵二城 理庫存量:打 進行生產操作口人還是酒牌爆作on?I請輸A蘿生產的產品割黃門.已經生科產品數規庫存量;s 遺行生產操作門八還是清寒堤作OB?背漏人不牛廣的產品數量二餐町不能僅行生產任務!費生產的產品數量:期庫存量:g白餐町不能僅行生產任務!強行生產掾作1狂夏餐費提信(S2此時表示存儲空間已滿,不能繼續進行生產操作F面進行消費操作:19欠0迎下載精品文檔快速訪問隹 JtiVdL問施Q Javad/聲明D在制臺支廨 QL
21、cigQt 苜同S 3=1 u同S 3=1 u I百 湎,需S吒i KDProducerAndConsdTier Java 近串程.序t:Progr3m HlesJavajrlkI.8.C /4bin|avaw exe 已生產產品敵量力已消費產品轉量:0層存量;0暴大存儲土醺MI0港行生產操作tlr還是消費操作力?請輸入要生產的產品數量:2己腌生女產品數:20現摩存量:2。進行生產操傳-3還是精費提作(。”*輸入要生產的產品數量:30已經生品數;式 觀摩存量”c逑行生產操作JI) a還是消費墀作(0?清輸人要主產的產品數量:1日已經豐五產品數;:白觀庫存量:。遇行生產操作(“,還是消費操作52清輸入蔓生產的產品數量:30已蛭生女產品數二30頊庫存量:9E進行生產悔住什),還杲消普操作(3?清輸入要生產的產品數量:式要生產的產品敷量:心庫存量:鉞哲時不能執行生產任務!進行生產瞳作 1”還罡消費操作0)?Q謔輸入要酒費的產品教量:21T已經消費產品數二口現庫存量為門自彳進行生=操作(1,還是蔣費操作3)?要生產的產品數量7。庫存量:暫時不能執行生產任務!迸亍生女操作11,還是消用理作1力?此
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 多方位解讀計算機基礎知識試題及答案
- 2025年MySQL考試鞏固重點試題及答案
- 2025年計算機二級Msoffice考試全方位試題及答案
- 財務成本管理系統培訓試題及答案總結
- 法律刑法試題及答案解析
- 法律文書考試題及答案
- 計算機二級Web考試全景解析試題及答案
- 邏輯推理與財務成本管理的結合探討試題及答案
- 深入掌握經濟法知識框架試題及答案
- 財務危機狀態下的邏輯分析試題及答案
- JJF 1049-2024溫度傳感器動態響應校準規范
- 《形形色色的人》習作教學課件
- 2024-2030年中國軍工信息化行業市場發展現狀及發展趨勢與投資戰略研究報告
- 幼兒園男性教師對幼兒性別意識發展的影響
- 《復發性流產診治專家共識2022》解讀
- 初中生財商素質教育教學設計
- 泵站運行管理手冊
- SH∕T 3097-2017 石油化工靜電接地設計規范
- HJ1188-2021核醫學輻射防護與安全要求
- 居間服務合同范本在線查看
- 鵝購銷協議范本
評論
0/150
提交評論