【多線程】一、線程狀態切換

相關文章:
【多線程】一、線程狀態切換
【多線程】二、線程優先級&守護線程
【多線程】三、線程訪問變量
【多線程】四、線程異常抓捕
【多線程】五、線程池
【多線程】六、鎖與同步
【多線程】七、阻塞隊列
【多線程】八、異步計算結果獲取
【多線程】九、Android異步任務

狀態 說明
新建(New) 線程新創建,尚未執行start()方法
可運行(Runnable) 線程就緒,等待OS調度運行
等待(Waiting) 線程主動停止活動(休眠,禮讓,等條件滿足),等待被喚醒
阻塞(Blocked) 線程被鎖阻塞,停止活動
終止(Terminated) 線程自然終止或異常死亡

線程狀態切換

線程讓出資源 說明
Thread#join(); 當前線程放棄CPU,放棄鎖,進入Waiting,直到目標線程跑完進入Runnable
Thread::sleep(); 當前線程放棄CPU,保持鎖,進入Waiting,超時後轉Runnable等調度;
Thread::yield(); 當前線程放棄CPU,保持鎖,進入Runnable,等待調度(禮讓高優先級);

中斷線程

Runnable runTask = new Runnable(){
    public void run(){
        // 檢查中斷標記
        while(!Thread.currentThread().isInterrupted()){
            // do ...
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                // 外部調interrupt()拋異常中斷本線程,標誌被複位爲false,手動調整爲true交給while處理
                Thread.currentThread().interrupt();
            }
        }
    }
}
中斷相關 說明
Thread#interrupt(); 請求中斷目標線程,若目標線程運行在sleep,wait,join中直接以異常中斷之;
Thread#isInterrupted(); 檢查中斷標記位,返回是否應中斷執行;無復位操作可多次調用
Thread::interrupted(); 返回當前線程是否被中斷,並把中斷位復位爲false;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章