![實(shí)驗(yàn)8 Java中的多線程_第1頁](http://file4.renrendoc.com/view/b6f33246379aed07cf4c3080b5c4f75b/b6f33246379aed07cf4c3080b5c4f75b1.gif)
![實(shí)驗(yàn)8 Java中的多線程_第2頁](http://file4.renrendoc.com/view/b6f33246379aed07cf4c3080b5c4f75b/b6f33246379aed07cf4c3080b5c4f75b2.gif)
![實(shí)驗(yàn)8 Java中的多線程_第3頁](http://file4.renrendoc.com/view/b6f33246379aed07cf4c3080b5c4f75b/b6f33246379aed07cf4c3080b5c4f75b3.gif)
![實(shí)驗(yàn)8 Java中的多線程_第4頁](http://file4.renrendoc.com/view/b6f33246379aed07cf4c3080b5c4f75b/b6f33246379aed07cf4c3080b5c4f75b4.gif)
![實(shí)驗(yàn)8 Java中的多線程_第5頁](http://file4.renrendoc.com/view/b6f33246379aed07cf4c3080b5c4f75b/b6f33246379aed07cf4c3080b5c4f75b5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
南昌大學(xué)實(shí)驗(yàn)報(bào)告學(xué)生姓名:王維學(xué)號:6100212202專業(yè)班級:網(wǎng)工121班實(shí)驗(yàn)類型:■驗(yàn)證□綜合□設(shè)計(jì)□創(chuàng)新實(shí)驗(yàn)日期:實(shí)驗(yàn)成績:實(shí)驗(yàn)名稱實(shí)驗(yàn)8Java中的多線程實(shí)驗(yàn)?zāi)康恼莆認(rèn)ava多線程應(yīng)用程序設(shè)計(jì)方法,并了解在Java用程序中控制線程狀態(tài)的方法。三、實(shí)驗(yàn)內(nèi)容隨著計(jì)算機(jī)的飛速發(fā)展,個(gè)人計(jì)算機(jī)上的操作系統(tǒng)也紛紛采用多任務(wù)和分時(shí)設(shè)計(jì),將早期只有大型計(jì)算機(jī)才具有的系統(tǒng)特性帶到了個(gè)人計(jì)算機(jī)系統(tǒng)中。一般可以在同一時(shí)間內(nèi)執(zhí)行多個(gè)程序的操作系統(tǒng)都有進(jìn)程的概念。一個(gè)進(jìn)程就是一個(gè)執(zhí)行中的程序,而每一個(gè)進(jìn)程都有自己獨(dú)立的一塊內(nèi)存空間、一組系統(tǒng)資源。在進(jìn)程概念中,每一個(gè)進(jìn)程的內(nèi)部數(shù)據(jù)和狀態(tài)都是完全獨(dú)立的。Java程序通過流控制來執(zhí)行程序流,程序中單個(gè)順序的流控制稱為線程,多線程則指的是在單個(gè)程序中可以同時(shí)運(yùn)行多個(gè)不同的線程,執(zhí)行不同的任務(wù)。多線程意味著一個(gè)程序的多行語句可以看上去幾乎在同一時(shí)間內(nèi)同時(shí)運(yùn)行。線程與進(jìn)程相似,是一段完成某個(gè)特定功能的代碼,是程序中單個(gè)順序的流控制;但與進(jìn)程不同的是,同類的多個(gè)線程是共享一塊內(nèi)存空間和一組系統(tǒng)資源,而線程本身的數(shù)據(jù)通常只有微處理器的寄存器數(shù)據(jù),以及一個(gè)供程序執(zhí)行時(shí)使用的堆棧。所以系統(tǒng)在產(chǎn)生一個(gè)線程,或者在各個(gè)線程之間切換時(shí),負(fù)擔(dān)要比進(jìn)程小的多,正因如此,線程被稱為輕負(fù)荷進(jìn)程(light-weightprocess)。一個(gè)進(jìn)程中可以包含多個(gè)線程。本實(shí)驗(yàn)中要求大家掌握一下幾個(gè)程序,并給出結(jié)果:1、通過繼承類Thread構(gòu)造線程體classSimpleThreadextendsThread{publicSimpleThread(Stringstr){super(str);//調(diào)用其父類的構(gòu)造方法}publicvoidrun(){//重寫run方法for(inti=0;i<10;i++){System.out.println(i+""+getName());//打印次數(shù)和線程的名字try{sleep((int)(Math.random()*1000));//線程睡眠,把控制權(quán)交出去}catch(InterruptedExceptione){}}System.out.println("DONE!"+getName());//線程執(zhí)行結(jié)束}}publicclassTwoThreadsTest{publicstaticvoidmain(Stringargs[]){newSimpleThread("First").start();//第一個(gè)線程的名字為FirstnewSimpleThread("Second").start();//第二個(gè)線程的名字為Second}}2、通過接口構(gòu)造線程體publicclassClockextendsjava.applet.AppletimplementsRunnable{//實(shí)現(xiàn)接口ThreadclockThread;publicvoidstart(){//該方法是Applet的方法,不是線程的方法if(clockThread==null){clockThread=newThread(this,"Clock");/*線程體是Clock對象本身,線程名字為"Clock"*/clockThread.start();//啟動線程}}publicvoidrun(){//run()方法中是線程執(zhí)行的內(nèi)容while(clockThread!=null){repaint();//刷新顯示畫面try{clockThread.sleep(1000);//睡眠1秒,即每隔1秒執(zhí)行一次}catch(InterruptedExceptione){}}}publicvoidpaint(Graphicsg){Datenow=newDate();//獲得當(dāng)前的時(shí)間對象g.drawString(now.getHours()+":"+now.getMinutes()+":"+now.getSeconds(),5,10);//顯示當(dāng)前時(shí)間}publicvoidstop(){//該方法是Applet的方法,不是線程的方法clockThread.stop();clockThread=null;}}
生活費(fèi)問題:學(xué)生每月都需要生活費(fèi),家長每次隨機(jī)預(yù)存一段時(shí)間的生活費(fèi),家長和學(xué)生使用統(tǒng)一的一個(gè)帳號,在學(xué)生每次取帳號中一部分錢,不能超過余額,模擬這個(gè)過程。生活費(fèi)問題:學(xué)生每月都需要生活費(fèi),家長一次預(yù)存一段時(shí)間的生活費(fèi),家長和學(xué)生使用統(tǒng)一的一個(gè)帳號,在學(xué)生每次取帳號中一部分錢,直到帳號中沒錢時(shí)通知家長存錢,而家長看到帳戶還有錢則不存錢,直到帳戶沒錢時(shí)才存錢。四、實(shí)驗(yàn)要求1、了解線程的概念;2、了解簡單的多線程編程;3、了解線程的同步過程,能夠編寫線程的同步程序。五、實(shí)驗(yàn)環(huán)境1、PC微機(jī);2、DOS操作系統(tǒng)或Windows操作系統(tǒng);3、Eclipse程序集成環(huán)境。六、實(shí)驗(yàn)步驟 1、輸入上述程序; 2、分別執(zhí)行各個(gè)程序; 3、分析執(zhí)行結(jié)果,進(jìn)一步加深對多線程概念的理解。七、實(shí)驗(yàn)設(shè)計(jì)思路及源碼生活費(fèi)問題,有兩個(gè)。我設(shè)計(jì)了一個(gè)Cast接口,里面包含兩個(gè)抽象方法saveMoney表示存錢,takeMoney表示取錢。然后設(shè)計(jì)了父母Parent和孩子Child兩個(gè)線程類。它們以Cast對象為構(gòu)造參數(shù),并在run方法內(nèi)分別調(diào)用Cast接口的兩個(gè)抽象方法。在解決兩個(gè)生活費(fèi)問題的時(shí)候,只需要實(shí)現(xiàn)兩次Cast接口,就行了。其他的調(diào)用,開啟線程等代碼都可以復(fù)用。下面是Cast.java文件內(nèi)容:packageshiyan8;publicinterfaceCast{ publicvoidsaveMoney(); publicvoidtakeMoney();}//父母進(jìn)程classParentextendsThread{ Castcast; publicParent(Castcast){ this.cast=cast; } @Override publicsynchronizedvoidrun(){ super.run(); cast.saveMoney(); }}//孩子進(jìn)程classChildextendsThread{ Castcast; publicChild(Castcast){ this.cast=cast; } @Override publicsynchronizedvoidrun(){ super.run(); cast.takeMoney(); }}然后是第一種生活費(fèi)問題的代碼:packageshiyan8;importjava.util.Random;publicclassLivingCast1implementsCast{ privatedoublecast; publicstaticvoidmain(String[]args){ LivingCast1livingCast=newLivingCast1(); Parentp=newParent(livingCast); Childc=newChild(livingCast); p.start(); c.start(); } @Override publicvoidsaveMoney(){ while(true){ Randomr=newRandom(); doublevar=(double)r.nextInt(10000); cast+=var; System.out.println("家長存入了"+var+"元。當(dāng)前余額"+cast+"元"); try{ Thread.sleep(1000); }catch(InterruptedExceptione){ e.printStackTrace(); } } } @Override publicvoidtakeMoney(){ while(true){ Randomr=newRandom(); if(cast==0.0) continue; doublevar=r.nextInt((int)cast); cast-=var; System.out.println("學(xué)生取出了"+var+"元。當(dāng)前余額"+cast+"元"); try{ Thread.sleep(1000); }catch(InterruptedExceptione){ e.printStackTrace(); } } }}第二種生活費(fèi)問題的代碼:packageshiyan8;importjava.util.Random;publicclassLivingCast2implementsCast{ privatedoublecast; publicstaticvoidmain(String[]args){ LivingCast2livingCast=newLivingCast2(); Parentp=newParent(livingCast); Childc=newChild(livingCast); p.start(); c.start(); } @Override publicvoidsaveMoney(){ while(true){ try{ if(cast!=0.0){ System.out.println("賬戶有余額,不存錢"); Thread.sleep(5000); } Randomr=newRandom(); doublevar=r.nextInt(10000); cast+=var; System.out.println("家長存入了"+var+"元。當(dāng)前余額"+cast+"元"); Thread.sleep(1000); }catch(InterruptedExceptione){ e.printStackTrace(); } } } @Override publicvoidtakeMoney(){ while(true){ try{ Randomr=newRandom(); if(cast==0.0){ System.out.println("沒錢了,通知家長"); Thread.sleep(5000); } doublevar=r.nextInt(2000); if(var>cast) var=cast; cast-=var; System.out.println("學(xué)生取出了"+var+"元。當(dāng)前余額"+cast+"元"); Thread.sleep(1000); }catch(InterruptedExceptione){ e.prin
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- DB35T 2234-2024交趾黃檀容器苗培育技術(shù)規(guī)程
- 鄉(xiāng)村民宿合作協(xié)議合同模板
- 產(chǎn)品加工的委托合同
- 二手車轉(zhuǎn)讓合同模板
- 交通設(shè)施采購及養(yǎng)護(hù)合同范本
- 親屬間房屋無償贈與合同
- 個(gè)人農(nóng)村小產(chǎn)權(quán)房抵押融資合同
- 個(gè)體合作經(jīng)營收益分配合同
- 產(chǎn)業(yè)協(xié)同發(fā)展合同范本
- 個(gè)人合伙創(chuàng)業(yè)合同書范本
- 部編版語文小學(xué)二年級下冊第一單元集體備課(教材解讀)
- Photoshop 2022從入門到精通
- T-GDWJ 013-2022 廣東省健康醫(yī)療數(shù)據(jù)安全分類分級管理技術(shù)規(guī)范
- 校本課程生活中的化學(xué)
- DB43-T 2775-2023 花櫚木播種育苗技術(shù)規(guī)程
- 《我的家族史》課件
- 高空作業(yè)安全方案及應(yīng)急預(yù)案
- 蘇教版科學(xué)2023四年級下冊全冊教案教學(xué)設(shè)計(jì)及反思
- 八-十-天-環(huán)-游-地-球(讀書)專題培訓(xùn)課件
- 新會中集:集裝箱ISO尺寸要求
- 化學(xué)品-泄露與擴(kuò)散模型課件
評論
0/150
提交評論