更新時(shí)間:2020-11-24 17:27:25 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2588次
在Java多線程中,有許多的方法存在,以便實(shí)現(xiàn)線程的各種功能。這其中包含有靜態(tài)方法以及一些對(duì)象方法,本文就為學(xué)習(xí)多線程的小伙伴介紹10種線程中的常用方法,為我們學(xué)習(xí)多線程中方法的使用打下基礎(chǔ)。
下面就是線程中常用的10種方法:
1.start():
在使用 new 關(guān)鍵字創(chuàng)建一個(gè)線程后(New 狀態(tài)),并不表現(xiàn)出任何的線程活動(dòng)狀態(tài)(非 New、Terminated 狀態(tài),可以使用 isAlive 方法檢測(cè)線程的活動(dòng)狀態(tài)),CPU 也不會(huì)執(zhí)行線程中的代碼。
只有在 start() 方法執(zhí)行后,才表示這個(gè)線程可運(yùn)行了(Runnable 狀態(tài)),至于何時(shí)真正運(yùn)行還要看線程調(diào)度器的調(diào)度。
在線程死亡后,不要再次調(diào)用 start() 方法。只能對(duì)新建狀態(tài)的線程調(diào)用且只能調(diào)用一次 start() 方法,否則將拋出 IllegalThreadStateException 異常。
2.join():
在很多情況下,主線程創(chuàng)建并啟動(dòng)了線程,如果子線程中藥進(jìn)行大量耗時(shí)運(yùn)算,主線程往往將早于子線程結(jié)束之前結(jié)束。這時(shí),如果主線程想等待子線程執(zhí)行完成之后再結(jié)束,比如子線程處理一個(gè)數(shù)據(jù),主線程要取得這個(gè)數(shù)據(jù)中的值,就要用到j(luò)oin()方法了。方法join()的作用是等待線程對(duì)象銷毀。
3.run():
啟動(dòng)線程是 start() 方法,而不是 run() 方法。run()方法是不需要用戶來調(diào)用的,當(dāng)通過start方法啟動(dòng)一個(gè)線程之后,當(dāng)線程獲得了CPU執(zhí)行時(shí)間,便進(jìn)入run方法體去執(zhí)行具體的任務(wù)。注意,繼承Thread類必須重寫run方法,在run方法中定義具體要執(zhí)行的任務(wù)。
4.sleep():
主動(dòng)放棄占用的處理器資源,該線程進(jìn)入阻塞狀態(tài)(Blocked 狀態(tài)),指定的睡眠時(shí)間超時(shí)后,線程進(jìn)入就緒狀態(tài)(Runnable),等待線程調(diào)度器的調(diào)用。
5.yield():
主動(dòng)放棄占用的處理器資源,線程直接進(jìn)入就緒狀態(tài)(Runnable),等待線程調(diào)度器的調(diào)用。
可能的情況是當(dāng)線程使用 yield 方法放棄執(zhí)行后,線程調(diào)度器又將該線程調(diào)度執(zhí)行。
6.interrupt():
沒有任何強(qiáng)制線程終止的方法,這個(gè)方法只是請(qǐng)求線程終止,而實(shí)際上線程并不一定會(huì)終止,在調(diào)用 sleep() 方法時(shí)可能會(huì)出現(xiàn) InterruptedException 異常,你可能會(huì)想在異常捕獲后(try-catch語句中的catch)請(qǐng)求線程終止,而更好的選擇是不處理這個(gè)異常,拋給調(diào)用者處理,所以這個(gè)方法并沒有實(shí)際的用途,還有 isInterrupted() 方法檢查線程是否被中斷。
7.setDaemon():
設(shè)置守護(hù)進(jìn)程,該方法必須在 start() 方法之前調(diào)用,判斷一個(gè)線程是不是守護(hù)線程,可以使用 isDaemon() 方法判斷。
8.setPriority():
設(shè)置線程的優(yōu)先級(jí),理論上來說,線程優(yōu)先級(jí)高的線程更容易被執(zhí)行,但也要結(jié)合具體的系統(tǒng)。
每個(gè)線程默認(rèn)的優(yōu)先級(jí)和父線程(如 main 線程、普通優(yōu)先級(jí))的優(yōu)先級(jí)相同,線程優(yōu)先級(jí)區(qū)間為 1~10,三個(gè)靜態(tài)變量:MIN_PRIORITY = 1、NORM_PRIORITY = 5、MAX_PRIORITY = 10。
使用 getPriority() 方法可以查看線程的優(yōu)先級(jí)。
9.isAlive():
檢查線程是否處于活動(dòng)狀態(tài),如果線程處于就緒、運(yùn)行、阻塞狀態(tài),方法返回 true,如果線程處于新建和死亡狀態(tài),方法返回 false。
10.getId()
getId()的作用是取得線程的唯一標(biāo)識(shí)
public class Test {
public static void main(String[] args) {
Thread t= Thread.currentThread();
System.out.println(t.getName()+" "+t.getId());
}
}
//main 1
以上就是線程中的常用10種方法,倘若你是初入Java的入門學(xué)習(xí)者,可能還需要更加細(xì)致的講解,配合本站的Java多線程教程里面的各種方法實(shí)例一起學(xué)習(xí)效果更佳哦!
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)