您好,登錄后才能下訂單哦!
這篇文章主要講解了“Java線程的狀態與常用方法有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java線程的狀態與常用方法有哪些”吧!
可以通過 Thread.getState 方法獲得線程的狀態(線程一共有 6 種狀態)
NEW(新建)new:尚未啟動
RUNNABLE(可運行狀態)runnable:正在 JVM 中運行;或者正在等待操作系統的其他資源(比如處理器)
//有些編程語言會把RUNNABLE分成2種情況
//1.running
//2.ready
//以上2種在Java中都屬于RUNNABLE
BLOCKED(阻塞狀態) blocked:正在等待監視器鎖(內部鎖)
WAITING(等待狀態) waiting:在等待另一個線程
調用以下方法會處于等待狀態
沒有超時值的 Object.wait
沒有超時值的 Thread.join
LockSupport.park
//后續會詳細介紹
TIMED_WAITING(定時等待狀態) timed_waiting
調用以下方法會處于定時等待狀態
Thread.sleep
有超時值的 Object.wait
有超時值的 Thread.join
LockSupport.parkNanos
LockSupport.parkUnti
//后續會詳細介紹
TERMINATED(終止狀態):已經執行完畢
部分實例:
public class Main { public static void main(String[] a) { Thread dangqian = Thread.currentThread();//獲取主線程 System.out.println(dangqian.getState());//輸出RUNNABLE //表示主線程正處于RUNNABLE狀態 Thread tj = new Thread();//新建1個線程 System.out.println(tj.getState());//輸出NEW Thread tj1 = new Thread(new Runnable() { @Override public void run() { System.out.println("ACM"); } }); tj1.start(); //啟動執行完run方法后線程終止 此時處于TERMINATED狀態 } }
sleep interrupt 介紹
可以通過 Thread.sleep 方法暫停當前線程,進入WAITING狀態
在暫停期間,若調用線程對象的 interrupt 方法中斷線程,會拋出 java.lang.InterruptedException 異常
實例(注釋)介紹更為明了:
public class Main { public static void main(String[] a) { Thread tj = new Thread(new Runnable() { @Override public void run() { System.out.println("1"); try { Thread.sleep(3000);//sleep是靜態方法,所以通過類名來調用;讓線程睡3s }catch (InterruptedException e) { e.printStackTrace(); } System.out.println("2"); } }); tj.start(); //因為是多線程,在執行tj線程時,主線程依然往下走 try { Thread.sleep(1000);//讓主線程睡1s } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("3"); //由于tj線程睡得較久,所以先打印3,再打印2 tj.interrupt();//中斷此線程,但實際上只是給線程設置一個中斷標志,線程仍會執行;在這里用于觸發異常 } }
輸出:
1
3
2
join isAlive 介紹
A.join 方法:等線程 A 執行完畢后,當前線程再繼續執行任務。可以傳參指定最長等待時間
A.isAlive 方法:查看線程 A 是否還活著
實例:
public class Main { public static void main(String[] a) { Thread tj = new Thread(new Runnable() { @Override public void run() { System.out.println("1"); try { Thread.sleep(3000);//sleep是靜態方法,所以通過類名來調用;讓線程睡3s }catch (InterruptedException e) { e.printStackTrace(); } System.out.println("2"); } }); tj.start(); System.out.println(tj.isAlive());//此時3s未過,tj線程仍在執行;所以輸出true try { tj.join();//等tj線程執行完畢再往下執行 //tj.join(1000); 等待tj線程1s再往下執行 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("3"); System.out.println(tj.getState()); System.out.println(tj.isAlive());//tj線程已執行完畢;所以輸出false } }
輸出:
true
1
2
3
TERMINATED
false
感謝各位的閱讀,以上就是“Java線程的狀態與常用方法有哪些”的內容了,經過本文的學習后,相信大家對Java線程的狀態與常用方法有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。