java多線程實(shí)現(xiàn)調(diào)度_第1頁
java多線程實(shí)現(xiàn)調(diào)度_第2頁
java多線程實(shí)現(xiàn)調(diào)度_第3頁
java多線程實(shí)現(xiàn)調(diào)度_第4頁
java多線程實(shí)現(xiàn)調(diào)度_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

慶交通大綜合性設(shè)計(jì)性實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)項(xiàng)目名稱:進(jìn)程調(diào)度(先來先服務(wù))實(shí)驗(yàn)項(xiàng)目性質(zhì):JAVA多線程實(shí)驗(yàn)所屬課程:JAVA程序設(shè)計(jì)實(shí)驗(yàn)室(中心):語音大樓8樓801班 級(jí):軟件專業(yè)2012級(jí)2班姓 名:尚亞*學(xué) 號(hào):631206050216指導(dǎo)教師:_楊 實(shí)驗(yàn)完成時(shí)間:2014年11月25日一、 實(shí)驗(yàn)?zāi)康?、 理解程序、線程和進(jìn)程的概念;2、 理解多線程的概念;3、 掌握線程的各種狀態(tài);4、 熟練使用Thread類創(chuàng)建線程;5、 熟練使用線程各種方法;6、 掌握線程的調(diào)度及線程同步的實(shí)現(xiàn)原理。二、 實(shí)驗(yàn)內(nèi)容及要求進(jìn)程調(diào)度是處理機(jī)管理的核心內(nèi)容。本實(shí)驗(yàn)要求采用最高優(yōu)先數(shù)優(yōu)先的調(diào)度算法(即把處理機(jī)分配給優(yōu)先數(shù)最高的進(jìn)程)和先來先服務(wù)算法編寫和調(diào)試一個(gè)簡單的進(jìn)程調(diào)度程序。通過本實(shí)驗(yàn)可以加深理解有關(guān)進(jìn)程控制塊、進(jìn)程隊(duì)列的概念。并體會(huì)了優(yōu)先數(shù)和先來先服務(wù)調(diào)度算法的具體實(shí)施辦法。用JAVA語言編寫和調(diào)試一個(gè)進(jìn)程調(diào)度程序,以加深對(duì)進(jìn)程的概念及進(jìn)程調(diào)度算法的理解。做一個(gè)能夠直觀體現(xiàn)多個(gè)進(jìn)程時(shí),CPU是怎樣調(diào)度就緒隊(duì)列中的進(jìn)程(按照先來先服務(wù)的原則)。三、實(shí)驗(yàn)設(shè)備PC機(jī),windows?,eclipse。四、設(shè)計(jì)方案㈠設(shè)計(jì)主要思想(1) 要模擬進(jìn)程的調(diào)度算法,必須先體現(xiàn)處進(jìn)程及系統(tǒng)資源。(2) 要體現(xiàn)先來先服務(wù)的算法,就必須表現(xiàn)出當(dāng)有一個(gè)進(jìn)程進(jìn)入CPU時(shí)其他進(jìn)程不能進(jìn)入,并在就緒隊(duì)列中排隊(duì)。本實(shí)驗(yàn)建立了四個(gè)圓移動(dòng)的線程表示作業(yè)調(diào)度,用圓在表示就緒隊(duì)列的方框中停留表示進(jìn)程在就緒隊(duì)列中排隊(duì)。(3)當(dāng)有一個(gè)圓移動(dòng)到表示CPU的范圍內(nèi)時(shí),讓其它線程在就緒隊(duì)列中排隊(duì),當(dāng)CPU內(nèi)無進(jìn)程時(shí),先來的圓先移動(dòng),以表示CPU對(duì)進(jìn)程的調(diào)度。㈡設(shè)計(jì)的主要步驟(1) 建立四個(gè)不同顏色的圓移動(dòng)的線程,表示對(duì)四個(gè)進(jìn)程的調(diào)度。(2) 當(dāng)有一個(gè)表示進(jìn)程的圓到達(dá)表示CPU范圍內(nèi)時(shí),通過讓其它幾個(gè)圓停留在表示就緒隊(duì)列的方框范圍內(nèi),表示進(jìn)程在就緒隊(duì)列中排成隊(duì)列。(3) 當(dāng)?shù)谝粋€(gè)先到達(dá)的進(jìn)程釋放CPU,在排成隊(duì)列的幾個(gè)圓中選擇先到達(dá)的圓,使其移動(dòng)表示對(duì)先來的進(jìn)程進(jìn)行調(diào)度,直到所有的圓移動(dòng)完畢。五、主要代碼importjava.awt.Font;importjava.awt.event.*;importjava.awt.*;importjavax.swing.*;publicclassDoubleBufferextendsFrame//主類繼承Frame類{privateJButtonbutton1;privateImageiBuffer,iBuffer1;privateGraphicsgBuffer1,gBuffer2,gBuffer3,gBuffer4,gBuffer5,gBuffer6;publicpaintThreadpT1;//繪圖線程publicpaintThreadpT2;//繪圖線程publicpaintThreadpT3;//繪圖線程publicpaintThreadpT4;//繪圖線程publicintx1=100,y1=100;//小圓橫、縱坐標(biāo)publicintx2=100,y2=170;//小圓橫、縱坐標(biāo)publicintx3=100,y3=240;//小圓橫、縱坐標(biāo)publicintx4=100,y4=310;//小圓橫、縱坐標(biāo)publicinta=1;publicintb=2;publicintc=3;publicintd=4;publicDoubleBuffer()//構(gòu)造函數(shù){super("Java實(shí)現(xiàn)調(diào)度模擬");this.setResizable(false);//窗體不可最大化this.setSize(750,470);//設(shè)置窗口的首選大小this.setVisible(true);//顯示窗口button1=newJButton("運(yùn)行");pT1=newpaintThread(this,1);pT2=newpaintThread(this,2);pT3=newpaintThread(this,3);pT4=newpaintThread(this,4);button1.setLocation(100,415);button1.setSize(90,40);add(button1);button1.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){//TODOAuto-generatedmethodstubx1=100;y1=100;//小圓橫、縱坐標(biāo)x2=100;y2=170;//小圓橫、縱坐標(biāo)x3=100;y3=240;//小圓橫、縱坐標(biāo)x4=100;y4=310;//小圓橫、縱坐標(biāo)a=1;b=2;c=3;d=4;pT1.start();//繪圖線程啟動(dòng)pT2.start();//繪圖線程啟動(dòng)pT3.start();//繪圖線程啟動(dòng)pT4.start();//繪圖線程啟動(dòng)}});}publicvoidpaint(Graphicsscr)//重載繪圖函數(shù){scr.setColor(Color.RED);//設(shè)置小圓顏色Fontfont1=newFont("宋體",F(xiàn)ont.BOLD,30);scr.setFont(font1);scr.drawString("CPU",580,235);Fontfont=newFont("宋體",F(xiàn)ont.BOLD,20);scr.setFont(font);scr.drawString("線程一",250,135);scr.fillOval(x1,y1,60,60);//繪制小圓scr.setColor(Color.BLUE);//設(shè)置小圓顏色//Fontfont=newFont("宋體",F(xiàn)ont.BOLD,20);//scr.setFont(font);scr.drawString("線程二",250,205);scr.fillOval(x2,y2,60,60);//繪制小圓scr.setColor(Color.YELLOW);//設(shè)置小圓顏色//Fontfont=newFont("宋體",F(xiàn)ont.BOLD,20);//scr.setFont(font);scr.drawString("線程三",250,275);scr.fillOval(x3,y3,60,60);//繪制小圓scr.setColor(Color.PINK);//設(shè)置小圓顏色//Fontfont=newFont("宋體",F(xiàn)ont.BOLD,20);//scr.setFont(font);scr.drawString("線程四",250,345);scr.fillOval(x4,y4,60,60);//繪制小圓//button1.repaint();}publicvoidupdate(Graphicsscr){if(iBuffer1==null){iBuffer1=createImage(670,400);gBuffer1=iBuffer1.getGraphics();}gBuffer1.setColor(Color.BLACK);gBuffer1.fillRect(100,100,340,60);gBuffer1.setColor(Color.BLACK);gBuffer1.fillRect(100,170,340,60);gBuffer1.setColor(Color.BLACK);gBuffer1.fillRect(100,240,340,60);gBuffer1.setColor(Color.BLACK);gBuffer1.fillRect(100,310,340,60);gBuffer1.setColor(Color.MAGENTA);gBuffer1.fillRect(440,100,60,270);gBufferl.setColor(Color.GREEN);gBuffer1.fillRect(500,205,170,60);paint(gBuffer1);scr.drawImage(iBuffer1,0,0,this);}publicstaticvoidmain(String[]args){DoubleBufferDB=newDoubleBuffer();//創(chuàng)建主類的對(duì)象DB.addWindowListener(newWindowAdapter() 〃添加窗口關(guān)閉處理函數(shù){publicvoidwindowClosing(WindowEvente){System.exit(0);}});}}classpaintThreadextendsThread//繪圖線程類{DoubleBufferDB;ints;publicpaintThread(DoubleBufferDB,ints)〃構(gòu)造函數(shù){this.DB=DB;this.s=s;}publicvoidrun()//重載run()函數(shù){while(true)//線程中的無限循環(huán){DB.repaint();//窗口重繪if(s==1){if(DB.x1<440){DB.x1++;//修改小圓的橫坐標(biāo)try{sleep(20);//線程休眠20ms}catch(InterruptedExceptione){}}elseif(DB.a==1&&DB.b==0&&DB.x1<670){DB.y1=205;if(DB.x1==440)DB.x1=DB.x1+40;DB.x1++;//修改小圓的橫坐標(biāo)try{sleep(15);//線程休眠15ms}catch(InterruptedExceptione){}}}if(s==2){if(DB.x2<440){DB.x2++;//修改小圓的橫坐標(biāo)try{sleep(13);//線程休眠13ms}catch(InterruptedExceptione){}}elseif(DB.a==1&&DB.b==2&&DB.c==3&&DB.d==0&&DB.x2<670){DB.y2=205;if(DB.x2==340)DB.x2=DB.x2+40;DB.x2++;//修改小圓的橫坐標(biāo)try{sleep(15);//線程休眠15ms}catch(InterruptedExceptione){}}elseif(DB.d==0)DB.c=0;}if(s==3){if(DB.x3<440){DB.x3++;//修改小圓的橫坐標(biāo)try{sleep(16);〃線程休眠16ms}catch(InterruptedExceptione){}}elseif(DB.a==1&&DB.b==2&&DB.c==0&&DB.x3<670){DB.y3=205;if(DB.x3==340)DB.x3=DB.x3+40;DB.x3++;//修改小圓的橫坐標(biāo)try{sleep(15);//線程休眠15ms}catch(InterruptedExceptione){}}elseif(DB.d==0&&DB.c==0)DB.b=0;}if(s==4){if(DB.x4<440){DB.x4++;//修改小圓的橫坐標(biāo)try{sleep(8);//線程休眠8ms}catch(InterruptedExceptione){}}elseif(DB.a==1&&DB.b==2&&DB.c==3&&DB.d==4&&DB.x4<670){DB.y4=205;if(DB.x4==340)DB.x4=DB.x4+40;DB.x4++;//修改小圓的橫坐標(biāo)try{sleep(15);//線程休眠15ms}catch(InterruptedExceptione){}}elseDB.d=0;}//DB.repaint();//窗口重繪}}}六、測(cè)試結(jié)果及說明1、四個(gè)圓表示四個(gè)線程:2、當(dāng)有一個(gè)進(jìn)程進(jìn)入CPU時(shí),其他進(jìn)程在就緒隊(duì)列中排隊(duì):

3、當(dāng)一個(gè)進(jìn)程不在獨(dú)占CPU時(shí),先到達(dá)的進(jìn)程先得到CPU資源:國Java國Java實(shí)現(xiàn)調(diào)度模擬I口I七、實(shí)驗(yàn)體會(huì)通過這次實(shí)驗(yàn),我對(duì)多線程有了更進(jìn)一步的理解,對(duì)調(diào)度的算法的實(shí)現(xiàn)有了更深一步的認(rèn)識(shí),了解了調(diào)度算法的原理及使用調(diào)度算法的意義,同時(shí)明白了調(diào)度算法對(duì)于整個(gè)操作系統(tǒng)資源的利用及系統(tǒng)的吞吐量都有很大影響,對(duì)操作系統(tǒng)的性能也有很大的影響。本設(shè)計(jì)使用當(dāng)今較為流行的可視化編程工具Eclipse設(shè)計(jì)應(yīng)用程序創(chuàng)建,應(yīng)用Java程序可做一個(gè)理想的界面,應(yīng)用所學(xué)知識(shí),實(shí)現(xiàn)進(jìn)程調(diào)度的算法。通過本次課程設(shè)計(jì),我了解到了我們平時(shí)的課程理論和做一個(gè)課程設(shè)計(jì)差的實(shí)在太遠(yuǎn),我們平時(shí)的Java實(shí)驗(yàn)和上課理論知識(shí)固然很重要,這是我們對(duì)基本知識(shí)點(diǎn)的一次次的鞏固,這是為我們做課程設(shè)計(jì)的基礎(chǔ)工作,是必不可少的一個(gè)環(huán)節(jié)。但是課程設(shè)計(jì)可以讓我們對(duì)課本上的內(nèi)容有更深的了解還可以考慮到各種意外情況的出現(xiàn)。我們往往所認(rèn)為的編代碼在課程設(shè)計(jì)里面所占的比例其實(shí)很小,真正要做的東西其實(shí)遠(yuǎn)遠(yuǎn)不止敲代碼。這也是我們的專業(yè)所要做的,這如我們的老師所說,敲代碼的學(xué)生不僅僅是計(jì)算機(jī)專業(yè)的,我們計(jì)算機(jī)專業(yè)的會(huì)的不僅僅是敲代碼,我們要做的是

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論