6.Java網(wǎng)絡編程實驗-多線程_第1頁
6.Java網(wǎng)絡編程實驗-多線程_第2頁
6.Java網(wǎng)絡編程實驗-多線程_第3頁
6.Java網(wǎng)絡編程實驗-多線程_第4頁
全文預覽已結(jié)束

下載本文檔

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

文檔簡介

Java網(wǎng)絡編程實驗報告(實驗六)學號:姓名:實驗項目名稱:多線程教師評分:一、實驗目的(1)了解線程的概念。(2)學習簡單的多線程編程。二、預習內(nèi)容及要求(要求寫出預習內(nèi)容)進程和線程的概念進程是程序一次動態(tài)執(zhí)行的過程,對應從代碼加載、執(zhí)行到執(zhí)行結(jié)束這樣一個完整的過程,也是進程自身從產(chǎn)生、發(fā)展到消亡的過程。線程是比進程更小的執(zhí)行單元,一個進程在執(zhí)行過程中,可以產(chǎn)生多個線程。每個線程都有自身的產(chǎn)生、執(zhí)行和消亡的過程。線程的狀態(tài)與生命周期新建:當一個Thread類或其子類的對象被聲明并創(chuàng)建時,新生的線程對象處于新建狀態(tài)。此時它已經(jīng)有了相應的內(nèi)存空間和其他資源。運行:線程創(chuàng)建之后就具備了運行的條件,一旦輪到它來享用CPU資源時,即JVM將CPU使用權(quán)切換給該線程時,此線程的就可以脫離創(chuàng)建它的主線程獨立開始自己的生命周期了(即run方法執(zhí)行的過程)。中斷:有4種原因的中斷,CPU資源從當前線程切換給其他線程、執(zhí)行了sleep(intmillsecond)方法、執(zhí)行了wait()方法、進入阻塞狀態(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其實就是指當前正在運行的線程對象,如果使用實現(xiàn)Runnable接口的方式,要得到當前正在執(zhí)行的線程,需要使用Thread.currentThread()方法。線程創(chuàng)建后僅僅是占有了內(nèi)存資源,在JVM管理的線程中還沒有這個線程,此線程必須調(diào)用start()方法(從父類繼承的方法)通知JVM,這樣JVM就會知道又有一個新一個線程排隊等候切換了。注意:多次啟動一個線程,或者啟動一個已經(jīng)運行的線程對象是非法的,會拋出IllegalThreadStateException異常對象。線程的優(yōu)先級同一時刻在等待隊列中的線程會有很多個,它們各自任務的重要性有所不同。為了加以區(qū)分,使工作安排和資源分配時間更為合理,每個線程可以被賦予不同的優(yōu)先級,讓任務比較急的線程擁有更高的優(yōu)先級,從而更快地進入執(zhí)行狀態(tài)。Java中提供了10個等級的線程優(yōu)先級,最低為Thread.MIN_PRIORITY=1,最高為Thread.MAX_PRIORITY=10,默認優(yōu)先級為Thread.NORM_PRIORITY=5。使用Thread類中的setPriority(int)方法可以為線程指定優(yōu)先級。線程的常用方法start()方法:線程調(diào)用該方法將啟動線程,使之從新建狀態(tài)進入就緒隊列排隊,一旦輪到它來享用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()方法。當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。當一個線程調(diào)用start()方法,并占有CPU資源后,該線程的run方法就開始運行,在線程的run方法結(jié)束之前,即沒有進入死亡狀態(tài)之前,線程調(diào)用isAlive()方法返回true。當線程進入“死亡”狀態(tài)后(實體內(nèi)存被釋放),線程仍可以調(diào)用方法isAlive(),這時返回的值是false。一個已經(jīng)運行的線程在沒有進入死亡狀態(tài)時,不要再給線程分配實體,由于線程只能引用最后分配的實體,先前的實體就會成為“垃圾”,并且不會被垃圾收集機收集掉。currentThread()方法:currentThread()方法是Thread類中的類方法,可以用類名調(diào)用,該方法返回當前正在使用CPU資源的線程。interrupt()方法:intertupt方法經(jīng)常用來“吵醒”休眠的線程。當一些線程調(diào)用sleep方法處于休眠狀態(tài)時,一個占有CPU資源的線程可以讓休眠的線程調(diào)用interrupt方法“吵醒”自己。線程的同步線程同步是指幾個線程都需要調(diào)用一個同步方法(使用關(guān)鍵字synchronized修飾的方法)。當一個線程A使用一個synchronized修飾的方法時,其他線程想使用這個方法時就必須等待,直到線程A使用完該方法(除非線程A使用wait主動讓出CPU資源)。一個線程在使用的同步方法中時,可能根據(jù)問題的需要,必須使用wait()方法使本線程等待,暫時讓出CPU的使用權(quán),并允許其它線程使用這個同步方法。其它線程如果在使用這個同步方法時如果不需要等待,那么它用完這個同步方法的同時,應當執(zhí)行notifyAll()方法通知所有的由于使用這個同步方法而處于等待的線程結(jié)束等待。掛起:有時候兩個線程并不是同步的,即不涉及都需要調(diào)用一個同步方法,但線程也可能需要暫時的掛起。所謂掛起一個線程就是讓線程暫時讓出CPU的使用權(quán)限,暫時停止執(zhí)行,但停止執(zhí)行的持續(xù)時間不確定,因此不能使用sleep方法暫停線程。掛起一個線程需使用wait方法,即讓準備掛起的線程調(diào)用wait方法,主動讓出CPU的使用權(quán)限.恢復:為了恢復該線程,其它線程在占有CUP資源期間,讓掛起的線程的目標對象執(zhí)行notifyAll()方法,使得掛起的線程繼續(xù)執(zhí)行;如果線程沒有目標對象,為了恢復該線程,其它線程在占有CUP資源期間,讓掛起的線程調(diào)用notifyAll()方法,使掛起的線程繼續(xù)執(zhí)行。三、實驗內(nèi)容、操作過程及實驗結(jié)果記錄1.輸入下面的JavaApplication程序,運行該程序,并簡要分析程序的運行結(jié)果。2.編寫程序,將上面多線程程序用Runnable接口來實現(xiàn)。3.編寫一個創(chuàng)建三個線程對象的程序。每個線程應該輸出一則消息,并在消息后緊跟字符串“消息結(jié)束”。在線程輸出消息后,應暫停一秒鐘,然后才輸出“消息結(jié)束”。首先應該有線程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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論