14 線程狀態
阿新 • • 發佈:2018-02-12
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 線程狀態