



下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Java網(wǎng)絡(luò)編程實(shí)驗(yàn)報(bào)告(實(shí)驗(yàn)六)學(xué)號(hào):姓名:實(shí)驗(yàn)項(xiàng)目名稱(chēng):多線(xiàn)程教師評(píng)分:一、實(shí)驗(yàn)?zāi)康模?)了解線(xiàn)程的概念。(2)學(xué)習(xí)簡(jiǎn)單的多線(xiàn)程編程。二、預(yù)習(xí)內(nèi)容及要求(要求寫(xiě)出預(yù)習(xí)內(nèi)容)進(jìn)程和線(xiàn)程的概念進(jìn)程是程序一次動(dòng)態(tài)執(zhí)行的過(guò)程,對(duì)應(yīng)從代碼加載、執(zhí)行到執(zhí)行結(jié)束這樣一個(gè)完整的過(guò)程,也是進(jìn)程自身從產(chǎn)生、發(fā)展到消亡的過(guò)程。線(xiàn)程是比進(jìn)程更小的執(zhí)行單元,一個(gè)進(jìn)程在執(zhí)行過(guò)程中,可以產(chǎn)生多個(gè)線(xiàn)程。每個(gè)線(xiàn)程都有自身的產(chǎn)生、執(zhí)行和消亡的過(guò)程。線(xiàn)程的狀態(tài)與生命周期新建:當(dāng)一個(gè)Thread類(lèi)或其子類(lèi)的對(duì)象被聲明并創(chuàng)建時(shí),新生的線(xiàn)程對(duì)象處于新建狀態(tài)。此時(shí)它已經(jīng)有了相應(yīng)的內(nèi)存空間和其他資源。運(yùn)行:線(xiàn)程創(chuàng)建之后就具備了運(yùn)行的條件,一旦輪到它來(lái)享用CPU資源時(shí),即JVM將CPU使用權(quán)切換給該線(xiàn)程時(shí),此線(xiàn)程的就可以脫離創(chuàng)建它的主線(xiàn)程獨(dú)立開(kāi)始自己的生命周期了(即run方法執(zhí)行的過(guò)程)。中斷:有4種原因的中斷,CPU資源從當(dāng)前線(xiàn)程切換給其他線(xiàn)程、執(zhí)行了sleep(intmillsecond)方法、執(zhí)行了wait()方法、進(jìn)入阻塞狀態(tài)。死亡:run方法結(jié)束。線(xiàn)程的創(chuàng)建在Java語(yǔ)言中,與線(xiàn)程支持密切相關(guān)的是java.lang.Thread類(lèi)和java.lang.Runnable接口。Runnable接口定義很簡(jiǎn)單,只有一個(gè)run方法。任何一個(gè)類(lèi)如果希望自己的實(shí)例能夠以線(xiàn)程的形式執(zhí)行,都可以來(lái)實(shí)現(xiàn)Runnable接口。繼承Thread類(lèi)和實(shí)現(xiàn)Runnable接口,都可以用來(lái)創(chuàng)建Thread對(duì)象,效果上并沒(méi)有什么不同。繼承Thread類(lèi)的方法很明顯的缺點(diǎn)就是這個(gè)類(lèi)不能再繼承其他的類(lèi)了,而實(shí)現(xiàn)Runnable接口不會(huì)有這個(gè)麻煩。另外,在繼承Thread類(lèi)的代碼中,this其實(shí)就是指當(dāng)前正在運(yùn)行的線(xiàn)程對(duì)象,如果使用實(shí)現(xiàn)Runnable接口的方式,要得到當(dāng)前正在執(zhí)行的線(xiàn)程,需要使用Thread.currentThread()方法。線(xiàn)程創(chuàng)建后僅僅是占有了內(nèi)存資源,在JVM管理的線(xiàn)程中還沒(méi)有這個(gè)線(xiàn)程,此線(xiàn)程必須調(diào)用start()方法(從父類(lèi)繼承的方法)通知JVM,這樣JVM就會(huì)知道又有一個(gè)新一個(gè)線(xiàn)程排隊(duì)等候切換了。注意:多次啟動(dòng)一個(gè)線(xiàn)程,或者啟動(dòng)一個(gè)已經(jīng)運(yùn)行的線(xiàn)程對(duì)象是非法的,會(huì)拋出IllegalThreadStateException異常對(duì)象。線(xiàn)程的優(yōu)先級(jí)同一時(shí)刻在等待隊(duì)列中的線(xiàn)程會(huì)有很多個(gè),它們各自任務(wù)的重要性有所不同。為了加以區(qū)分,使工作安排和資源分配時(shí)間更為合理,每個(gè)線(xiàn)程可以被賦予不同的優(yōu)先級(jí),讓任務(wù)比較急的線(xiàn)程擁有更高的優(yōu)先級(jí),從而更快地進(jìn)入執(zhí)行狀態(tài)。Java中提供了10個(gè)等級(jí)的線(xiàn)程優(yōu)先級(jí),最低為T(mén)hread.MIN_PRIORITY=1,最高為T(mén)hread.MAX_PRIORITY=10,默認(rèn)優(yōu)先級(jí)為T(mén)hread.NORM_PRIORITY=5。使用Thread類(lèi)中的setPriority(int)方法可以為線(xiàn)程指定優(yōu)先級(jí)。線(xiàn)程的常用方法start()方法:線(xiàn)程調(diào)用該方法將啟動(dòng)線(xiàn)程,使之從新建狀態(tài)進(jìn)入就緒隊(duì)列排隊(duì),一旦輪到它來(lái)享用CPU資源時(shí),就可以脫離創(chuàng)建它的線(xiàn)程獨(dú)立開(kāi)始自己的生命周期了。run()方法:Thread類(lèi)的run()方法與Runnable接口中的run()方法的功能和作用相同,都用來(lái)定義線(xiàn)程對(duì)象被調(diào)度之后所執(zhí)行的操作,都是系統(tǒng)自動(dòng)調(diào)用而用戶(hù)程序不得引用的方法。系統(tǒng)的Thread類(lèi)中,run()方法沒(méi)有具體內(nèi)容,所以用戶(hù)程序需要?jiǎng)?chuàng)建自己的Thread類(lèi)的子類(lèi),并重寫(xiě)run()方法來(lái)覆蓋原來(lái)的run()方法。當(dāng)run方法執(zhí)行完畢,線(xiàn)程就變成死亡狀態(tài)。sleep(intmillsecond)方法:現(xiàn)程占有CPU期間,執(zhí)行sleep方法來(lái)使自己放棄CPU資源,休眠一段時(shí)間。休眠時(shí)間的長(zhǎng)短由sleep方法的參數(shù)決定,millsecond是毫秒為單位的休眠時(shí)間。如果線(xiàn)程在休眠時(shí)被打斷,JVM就拋出InterruptedException異常。因此,必須在try~catch語(yǔ)句塊中調(diào)用sleep方法。isAlive()方法:線(xiàn)程處于“新建”狀態(tài)時(shí),線(xiàn)程調(diào)用isAlive()方法返回false。當(dāng)一個(gè)線(xiàn)程調(diào)用start()方法,并占有CPU資源后,該線(xiàn)程的run方法就開(kāi)始運(yùn)行,在線(xiàn)程的run方法結(jié)束之前,即沒(méi)有進(jìn)入死亡狀態(tài)之前,線(xiàn)程調(diào)用isAlive()方法返回true。當(dāng)線(xiàn)程進(jìn)入“死亡”狀態(tài)后(實(shí)體內(nèi)存被釋放),線(xiàn)程仍可以調(diào)用方法isAlive(),這時(shí)返回的值是false。一個(gè)已經(jīng)運(yùn)行的線(xiàn)程在沒(méi)有進(jìn)入死亡狀態(tài)時(shí),不要再給線(xiàn)程分配實(shí)體,由于線(xiàn)程只能引用最后分配的實(shí)體,先前的實(shí)體就會(huì)成為“垃圾”,并且不會(huì)被垃圾收集機(jī)收集掉。currentThread()方法:currentThread()方法是Thread類(lèi)中的類(lèi)方法,可以用類(lèi)名調(diào)用,該方法返回當(dāng)前正在使用CPU資源的線(xiàn)程。interrupt()方法:intertupt方法經(jīng)常用來(lái)“吵醒”休眠的線(xiàn)程。當(dāng)一些線(xiàn)程調(diào)用sleep方法處于休眠狀態(tài)時(shí),一個(gè)占有CPU資源的線(xiàn)程可以讓休眠的線(xiàn)程調(diào)用interrupt方法“吵醒”自己。線(xiàn)程的同步線(xiàn)程同步是指幾個(gè)線(xiàn)程都需要調(diào)用一個(gè)同步方法(使用關(guān)鍵字synchronized修飾的方法)。當(dāng)一個(gè)線(xiàn)程A使用一個(gè)synchronized修飾的方法時(shí),其他線(xiàn)程想使用這個(gè)方法時(shí)就必須等待,直到線(xiàn)程A使用完該方法(除非線(xiàn)程A使用wait主動(dòng)讓出CPU資源)。一個(gè)線(xiàn)程在使用的同步方法中時(shí),可能根據(jù)問(wèn)題的需要,必須使用wait()方法使本線(xiàn)程等待,暫時(shí)讓出CPU的使用權(quán),并允許其它線(xiàn)程使用這個(gè)同步方法。其它線(xiàn)程如果在使用這個(gè)同步方法時(shí)如果不需要等待,那么它用完這個(gè)同步方法的同時(shí),應(yīng)當(dāng)執(zhí)行notifyAll()方法通知所有的由于使用這個(gè)同步方法而處于等待的線(xiàn)程結(jié)束等待。掛起:有時(shí)候兩個(gè)線(xiàn)程并不是同步的,即不涉及都需要調(diào)用一個(gè)同步方法,但線(xiàn)程也可能需要暫時(shí)的掛起。所謂掛起一個(gè)線(xiàn)程就是讓線(xiàn)程暫時(shí)讓出CPU的使用權(quán)限,暫時(shí)停止執(zhí)行,但停止執(zhí)行的持續(xù)時(shí)間不確定,因此不能使用sleep方法暫停線(xiàn)程。掛起一個(gè)線(xiàn)程需使用wait方法,即讓準(zhǔn)備掛起的線(xiàn)程調(diào)用wait方法,主動(dòng)讓出CPU的使用權(quán)限.恢復(fù):為了恢復(fù)該線(xiàn)程,其它線(xiàn)程在占有CUP資源期間,讓掛起的線(xiàn)程的目標(biāo)對(duì)象執(zhí)行notifyAll()方法,使得掛起的線(xiàn)程繼續(xù)執(zhí)行;如果線(xiàn)程沒(méi)有目標(biāo)對(duì)象,為了恢復(fù)該線(xiàn)程,其它線(xiàn)程在占有CUP資源期間,讓掛起的線(xiàn)程調(diào)用notifyAll()方法,使掛起的線(xiàn)程繼續(xù)執(zhí)行。三、實(shí)驗(yàn)內(nèi)容、操作過(guò)程及實(shí)驗(yàn)結(jié)果記錄1.輸入下面的JavaApplication程序,運(yùn)行該程序,并簡(jiǎn)要分析程序的運(yùn)行結(jié)果。2.編寫(xiě)程序,將上面多線(xiàn)程程序用Runnable接口來(lái)實(shí)現(xiàn)。3.編寫(xiě)一個(gè)創(chuàng)建三個(gè)線(xiàn)程對(duì)象的程序。每個(gè)線(xiàn)程應(yīng)該輸出一則消息,并在消息后緊跟字符串“消息結(jié)束”。在線(xiàn)程輸出消息后,應(yīng)暫停一秒鐘,然后才輸出“消息結(jié)束”。首先應(yīng)該有線(xiàn)程1輸出消息,然后是線(xiàn)程2和線(xiàn)程3.提示: 創(chuàng)建一個(gè)類(lèi)Callme,其中包含call方法。此方法輸出消息后暫停1秒,然后輸出“消息結(jié)束”。創(chuàng)建一個(gè)類(lèi)Calle
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年哈爾濱地區(qū)投資總監(jiān)職位薪酬調(diào)查報(bào)告
- 新式小店創(chuàng)業(yè)計(jì)劃書(shū)怎么寫(xiě)
- 2025年仿石材漆項(xiàng)目可行性分析報(bào)告
- 公司環(huán)境合規(guī)性評(píng)價(jià)報(bào)告
- 袋裝水灌裝設(shè)備項(xiàng)目投資可行性研究分析報(bào)告(2024-2030版)
- 冷凝管項(xiàng)目可行性研究報(bào)告立項(xiàng)報(bào)告模板
- 透鏡片項(xiàng)目可行性分析報(bào)告(模板參考范文)
- 中國(guó)翻板多用機(jī)行業(yè)市場(chǎng)規(guī)模及未來(lái)投資方向研究報(bào)告
- 停車(chē)場(chǎng)管理系統(tǒng)市場(chǎng)分析報(bào)告
- 在線(xiàn)職業(yè)技能培訓(xùn)的人工智能個(gè)性化學(xué)習(xí)評(píng)估與反饋系統(tǒng)建設(shè)可行性研究報(bào)告
- 氮化爐安全操作規(guī)程
- XK5036數(shù)控立式銑床總體及橫向進(jìn)給傳動(dòng)機(jī)構(gòu)畢業(yè)設(shè)計(jì)畢業(yè)論文
- 核醫(yī)學(xué)主治醫(yī)師考試:核醫(yī)學(xué)專(zhuān)業(yè)知識(shí)真題模擬匯編(共569題)
- 英語(yǔ)論文Result-Discussion課件
- 單層鋼結(jié)構(gòu)工程施工作業(yè)指導(dǎo)書(shū)
- 第五單元群文閱讀(共28張PPT) 部編版語(yǔ)文八年級(jí)下冊(cè)
- 相似三角形的判定與性質(zhì)復(fù)習(xí)課(原創(chuàng)修訂)課件
- 買(mǎi)賣(mài)車(chē)輛不過(guò)戶(hù)協(xié)議書(shū)
- 青春期學(xué)生性教育PPT資料
- 文博考研-博物館學(xué)名詞解釋
- 安全信息管理程序
評(píng)論
0/150
提交評(píng)論