



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Java網(wǎng)絡(luò)編程實驗報告(實驗六)學(xué)號:姓名:實驗項目名稱:多線程教師評分:一、實驗?zāi)康模?)了解線程的概念。(2)學(xué)習(xí)簡單的多線程編程。二、預(yù)習(xí)內(nèi)容及要求(要求寫出預(yù)習(xí)內(nèi)容)進(jìn)程和線程的概念進(jìn)程是程序一次動態(tài)執(zhí)行的過程,對應(yīng)從代碼加載、執(zhí)行到執(zhí)行結(jié)束這樣一個完整的過程,也是進(jìn)程自身從產(chǎn)生、發(fā)展到消亡的過程。線程是比進(jìn)程更小的執(zhí)行單元,一個進(jìn)程在執(zhí)行過程中,可以產(chǎn)生多個線程。每個線程都有自身的產(chǎn)生、執(zhí)行和消亡的過程。線程的狀態(tài)與生命周期新建:當(dāng)一個Thread類或其子類的對象被聲明并創(chuàng)建時,新生的線程對象處于新建狀態(tài)。此時它已經(jīng)有了相應(yīng)的內(nèi)存空間和其他資源。運(yùn)行:線程創(chuàng)建之后就具備了運(yùn)行的條件,一旦輪到它來享用CPU資源時,即JVM將CPU使用權(quán)切換給該線程時,此線程的就可以脫離創(chuàng)建它的主線程獨立開始自己的生命周期了(即run方法執(zhí)行的過程)。中斷:有4種原因的中斷,CPU資源從當(dāng)前線程切換給其他線程、執(zhí)行了sleep(intmillsecond)方法、執(zhí)行了wait()方法、進(jìn)入阻塞狀態(tài)。死亡:run方法結(jié)束。線程的創(chuàng)建在Java語言中,與線程支持密切相關(guān)的是java.lang.Thread類和java.lang.Runnable接口。Runnable接口定義很簡單,只有一個run方法。任何一個類如果希望自己的實例能夠以線程的形式執(zhí)行,都可以來實現(xiàn)Runnable接口。繼承Thread類和實現(xiàn)Runnable接口,都可以用來創(chuàng)建Thread對象,效果上并沒有什么不同。繼承Thread類的方法很明顯的缺點就是這個類不能再繼承其他的類了,而實現(xiàn)Runnable接口不會有這個麻煩。另外,在繼承Thread類的代碼中,this其實就是指當(dāng)前正在運(yùn)行的線程對象,如果使用實現(xiàn)Runnable接口的方式,要得到當(dāng)前正在執(zhí)行的線程,需要使用Thread.currentThread()方法。線程創(chuàng)建后僅僅是占有了內(nèi)存資源,在JVM管理的線程中還沒有這個線程,此線程必須調(diào)用start()方法(從父類繼承的方法)通知JVM,這樣JVM就會知道又有一個新一個線程排隊等候切換了。注意:多次啟動一個線程,或者啟動一個已經(jīng)運(yùn)行的線程對象是非法的,會拋出IllegalThreadStateException異常對象。線程的優(yōu)先級同一時刻在等待隊列中的線程會有很多個,它們各自任務(wù)的重要性有所不同。為了加以區(qū)分,使工作安排和資源分配時間更為合理,每個線程可以被賦予不同的優(yōu)先級,讓任務(wù)比較急的線程擁有更高的優(yōu)先級,從而更快地進(jìn)入執(zhí)行狀態(tài)。Java中提供了10個等級的線程優(yōu)先級,最低為Thread.MIN_PRIORITY=1,最高為Thread.MAX_PRIORITY=10,默認(rèn)優(yōu)先級為Thread.NORM_PRIORITY=5。使用Thread類中的setPriority(int)方法可以為線程指定優(yōu)先級。線程的常用方法start()方法:線程調(diào)用該方法將啟動線程,使之從新建狀態(tài)進(jìn)入就緒隊列排隊,一旦輪到它來享用CPU資源時,就可以脫離創(chuàng)建它的線程獨立開始自己的生命周期了。run()方法:Thread類的run()方法與Runnable接口中的run()方法的功能和作用相同,都用來定義線程對象被調(diào)度之后所執(zhí)行的操作,都是系統(tǒng)自動調(diào)用而用戶程序不得引用的方法。系統(tǒng)的Thread類中,run()方法沒有具體內(nèi)容,所以用戶程序需要創(chuàng)建自己的Thread類的子類,并重寫run()方法來覆蓋原來的run()方法。當(dāng)run方法執(zhí)行完畢,線程就變成死亡狀態(tài)。sleep(intmillsecond)方法:現(xiàn)程占有CPU期間,執(zhí)行sleep方法來使自己放棄CPU資源,休眠一段時間。休眠時間的長短由sleep方法的參數(shù)決定,millsecond是毫秒為單位的休眠時間。如果線程在休眠時被打斷,JVM就拋出InterruptedException異常。因此,必須在try~catch語句塊中調(diào)用sleep方法。isAlive()方法:線程處于“新建”狀態(tài)時,線程調(diào)用isAlive()方法返回false。當(dāng)一個線程調(diào)用start()方法,并占有CPU資源后,該線程的run方法就開始運(yùn)行,在線程的run方法結(jié)束之前,即沒有進(jìn)入死亡狀態(tài)之前,線程調(diào)用isAlive()方法返回true。當(dāng)線程進(jìn)入“死亡”狀態(tài)后(實體內(nèi)存被釋放),線程仍可以調(diào)用方法isAlive(),這時返回的值是false。一個已經(jīng)運(yùn)行的線程在沒有進(jìn)入死亡狀態(tài)時,不要再給線程分配實體,由于線程只能引用最后分配的實體,先前的實體就會成為“垃圾”,并且不會被垃圾收集機(jī)收集掉。currentThread()方法:currentThread()方法是Thread類中的類方法,可以用類名調(diào)用,該方法返回當(dāng)前正在使用CPU資源的線程。interrupt()方法:intertupt方法經(jīng)常用來“吵醒”休眠的線程。當(dāng)一些線程調(diào)用sleep方法處于休眠狀態(tài)時,一個占有CPU資源的線程可以讓休眠的線程調(diào)用interrupt方法“吵醒”自己。線程的同步線程同步是指幾個線程都需要調(diào)用一個同步方法(使用關(guān)鍵字synchronized修飾的方法)。當(dāng)一個線程A使用一個synchronized修飾的方法時,其他線程想使用這個方法時就必須等待,直到線程A使用完該方法(除非線程A使用wait主動讓出CPU資源)。一個線程在使用的同步方法中時,可能根據(jù)問題的需要,必須使用wait()方法使本線程等待,暫時讓出CPU的使用權(quán),并允許其它線程使用這個同步方法。其它線程如果在使用這個同步方法時如果不需要等待,那么它用完這個同步方法的同時,應(yīng)當(dāng)執(zhí)行notifyAll()方法通知所有的由于使用這個同步方法而處于等待的線程結(jié)束等待。掛起:有時候兩個線程并不是同步的,即不涉及都需要調(diào)用一個同步方法,但線程也可能需要暫時的掛起。所謂掛起一個線程就是讓線程暫時讓出CPU的使用權(quán)限,暫時停止執(zhí)行,但停止執(zhí)行的持續(xù)時間不確定,因此不能使用sleep方法暫停線程。掛起一個線程需使用wait方法,即讓準(zhǔn)備掛起的線程調(diào)用wait方法,主動讓出CPU的使用權(quán)限.恢復(fù):為了恢復(fù)該線程,其它線程在占有CUP資源期間,讓掛起的線程的目標(biāo)對象執(zhí)行notifyAll()方法,使得掛起的線程繼續(xù)執(zhí)行;如果線程沒有目標(biāo)對象,為了恢復(fù)該線程,其它線程在占有CUP資源期間,讓掛起的線程調(diào)用notifyAll()方法,使掛起的線程繼續(xù)執(zhí)行。三、實驗內(nèi)容、操作過程及實驗結(jié)果記錄1.輸入下面的JavaApplication程序,運(yùn)行該程序,并簡要分析程序的運(yùn)行結(jié)果。2.編寫程序,將上面多線程程序用Runnable接口來實現(xiàn)。3.編寫一個創(chuàng)建三個線程對象的程序。每個線程應(yīng)該輸出一則消息,并在消息后緊跟字符串“消息結(jié)束”。在線程輸出消息后,應(yīng)暫停一秒鐘,然后才輸出“消息結(jié)束”。首先應(yīng)該有線程1輸出消息,然后是線程2和線程3.提示: 創(chuàng)建一個類Callme,其中包含call方法。此方法輸出消息后暫停1秒,然后輸出“消息結(jié)束”。創(chuàng)建一個類Calle
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 寧波大學(xué)《秘書實務(wù)A》2023-2024學(xué)年第二學(xué)期期末試卷
- 內(nèi)蒙古電子信息職業(yè)技術(shù)學(xué)院《體操》2023-2024學(xué)年第二學(xué)期期末試卷
- 編制管工施工方案
- 成人教育銷售培訓(xùn)
- 幼兒園安全教育小衛(wèi)士
- 青海省醫(yī)療衛(wèi)生事業(yè)單位招聘(藥學(xué))歷年考試真題庫及答案
- 勞防用品培訓(xùn)
- 2025屆山西省太原市高三一??荚嚁?shù)學(xué)試題
- 大學(xué)生創(chuàng)新創(chuàng)業(yè)結(jié)題匯報
- 地中海貧血防治健康知識
- 挖掘機(jī)使用臺班記錄表
- ISO9001-ISO14001-OHSAS18001三合一體系程序文件
- 學(xué)唱蟲兒飛(含歌詞、曲譜)
- 天津科技大學(xué)教師公寓租賃管理辦法
- 城市道路平面設(shè)計規(guī)范標(biāo)準(zhǔn)
- 第七章--展示的版面和色彩設(shè)計
- DBT29-295-2021 600MPa級高強(qiáng)鋼筋混凝土結(jié)構(gòu)技術(shù)標(biāo)準(zhǔn)
- Q∕GDW 12164-2021 變電站遠(yuǎn)程智能巡視系統(tǒng)技術(shù)規(guī)范
- 草莓栽培技術(shù)(課堂PPT)課件
- 機(jī)耕橋施工方案
- 貨車掛靠協(xié)議完整
評論
0/150
提交評論