獲取執行緒狀態的方法分享
阿新 • • 發佈:2022-05-10
轉自:
http://www.java265.com/JavaCourse/202204/3187.html
下文筆者講述Java中獲取執行緒狀態的方法分享,如下所示:
java執行緒狀態的簡介
Java中的執行緒整個生命週期中分為5種狀態: 1.新建狀態(New):新建的執行緒都為此狀態 2.就緒狀態(Runnable):執行緒物件建立後,其他執行緒呼叫了該物件的start()方法 該狀態的執行緒在"可執行執行緒池"中,是可執行,一旦獲得CPU許可權,則立即執行 3.執行狀態(Running):已經取得CPU許可權,並執行程式碼 4.阻塞狀態(Blocked):因某種原因放棄CPU使用權,暫時停止執行。 直到執行緒進入就緒狀態,才有機會轉到執行狀態 阻塞的情況分三種: 4.1 等待阻塞:執行的執行緒執行wait()方法,JVM會把該執行緒放入等待池中。 4.2 同步阻塞:執行的執行緒在獲取物件的同步鎖時,若該同步鎖被別的執行緒佔用,則JVM會把該執行緒放入鎖池中。 4.3 其他阻塞:執行的執行緒執行sleep()或join()方法, 或發出了I/O請求時,JVM會把該執行緒置為阻塞狀態 當sleep()狀態超時、join()等待執行緒終止或者超時 或I/O處理完畢時,執行緒重新轉入就緒狀態 5.死亡狀態(Dead):執行緒執行完了或因異常退出了run()方法,該執行緒結束生命週期
獲取執行緒狀態的示例分享
package com.java265.other; public class Test16 { public static void main(String[] args) throws Exception { MyThread2 a = new MyThread2(); a.setName("我是java265.com定義的執行緒!"); printThreadInfo(a); a.start(); Thread.sleep(50); printThreadInfo(a); a.waiting= false; Thread.sleep(50); printThreadInfo(a); a.notice(); Thread.sleep(50); printThreadInfo(a); while (a.isAlive()) System.out.println("alive"); printThreadInfo(a); } static void printThreadInfo(Thread t) { System.out.println(t.getName()+ " 存活:" + t.isAlive() + " 狀態:" + t.getState()); } } class MyThread2 extends Thread { boolean waiting = true; boolean ready = false; MyThread2() { } public void run() { String thrdName = Thread.currentThread().getName(); System.out.println(thrdName + " 啟動"); while (waiting) System.out.println("等待:" + waiting); System.out.println("等待..."); startWait(); try { Thread.sleep(1000); } catch (Exception exc) { System.out.println(thrdName + " 中斷。"); } System.out.println(thrdName + " 結束。"); } synchronized void startWait() { try { while (!ready) wait(); } catch (InterruptedException exc) { System.out.println("wait() 中斷。"); } } synchronized void notice() { ready = true; notify(); } } -------執行以上程式碼,將輸出以下資訊------- alive alive alive 我是java265.com定義的執行緒! 結束。 alive 我是java265.com定義的執行緒! 存活:false 狀態:TERMINATED