1. 程式人生 > >14 線程狀態

14 線程狀態

tar 線程池 自然 nbsp 條件 ace test 休眠 創建

package thread;

public class TestOne {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        method();
    }
    
    /**
     * 一個任務被稱為一個線程,同時運行一個以上的任務被稱為多線程。
     * 
     * 1.使線程休眠 sleep
     * 
     * 2.啟動線程start
     *  不要直接用Thread的start方法,創建一個線程池,不必為每個任務開啟一個線程
     *  不要直接調用 Thread方法和Runnable的run方法,只會執行同一線程中的任務,不會開啟一個新線程。
     * 
     * 3.中斷線程
     *   沒有方法可以強制線程中斷, interrupt 可以請求線程中斷,調用interrupt方法是線程的中斷狀態將被置位。
     *   
     *   void interrupt() 向線程發送請求,將線程的中斷狀態置為true
     *   
     *    public boolean isInterrupted() {} 測試當前線程是否被中斷。 會將當前線程的中斷狀態置為false
     *     
     *    public static native Thread currentThread(); 返回當前線程對象 
     *        
     
*/ public static void method(){ // Thread.currentThread().isInterrupted(); Thread.currentThread().interrupt(); System.out.println(Thread.currentThread().isInterrupted()); } }
package thread;

public class TestTwo {

    /**
     * 線程狀態
     * 
     * 線程可以有6種狀態:
     * New (新創建)
     * Runnable(可運行)
     * Blocked(被阻塞)
     * waiting(等待)
     * Timed waiting(計時等待)
     * Terminated(被終止)
     * 
     * 
     * 新創建線程
     * new Thread(r)
     * 
     * 可運行線程
     * 可能正在運行,也可能沒有運行
     * 搶占式調度系統:給每個可運行線程一個時間片來執行任務,時間片用完,剝奪線程的運行權,給另外一個線程運行機會。
     * 
     * 被阻塞線程和等待線程
     * 每個線程視圖獲取對象的內部鎖,當鎖被其他線程持有的時候,則該線程處於阻塞狀態。
     * 直到所有線程釋放內部鎖,線程調度器允許本線程持有它時,線程處於非阻塞狀態。
     * 
     * 等待狀態:當前線程等待另外一個線程通知調度器一個條件時,自身進入等待狀態。
     * 計時等待:有幾個方法具有超時參數,調用它,導致線程進入計時等待。
     * 
     * 被終止的線程
     * 有2個原因導致線程被終止:
     * 1)run方法正常退出而自然死亡
     * 2)因為一個沒有捕獲的異常終止了run方法
     * 
     * join() 等待終止指定的線程
     * 
     * Thread.currentThread().getState() 獲取當前線程的狀態
     
*/ public static void main(String[] args) { // TODO Auto-generated method stub try { System.out.println(Thread.currentThread().getState()); Thread.currentThread().join(); } catch (InterruptedException e) { e.printStackTrace(); } } }

技術分享圖片

14 線程狀態