1. 程式人生 > 其它 >獲取執行緒狀態的方法分享

獲取執行緒狀態的方法分享

轉自:

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