天天看點

【多線程】線程的生命周期

生命周期的五種狀态

【多線程】線程的生命周期
  • 建立(new Thread):

    當建立Thread類的一個執行個體(對象)時,此線程進入建立狀态(未被啟動),此時系統還沒有為其配置設定資源。

    例如:Thread t1=new Thread();

    通過Thread類的方法,可以設定線程的優先級(setPrioriry)、線程名(setName)、線程類型(setDaemon)。

  • 就緒(runnable):線程已經被啟動,正在等待被配置設定給CPU時間片,也就是說此時線程正在就緒隊列中排隊等候得到CPU資源。例如:t1.start();

    如果某線程執行了yield()方法,那麼該線程會被暫時剝奪CPU資源,重新進入就緒狀态。

  • 運作(running):線程獲得CPU資源正在執行任務(run()方法),此時除非此線程自動放棄CPU資源或者有優先級更高的線程進入,線程将一直運作到結束。

    通過使用Thread類的isAlive方法,可以判斷線程狀态,true代表線程處于就緒或運作狀态,false表示線程處于阻塞或停止狀态

  • 死亡(dead):當線程執行完畢或被其它線程殺死,線程就進入死亡狀态,這時線程不可能再進入就緒狀态等待執行。
    • 自然終止:正常運作run()方法後終止
    • 異常終止:調用stop()方法或interrupt()方法讓一個線程終止運作
  • 阻塞(blocked):

    由于某種原因導緻正在運作的線程讓出CPU并暫停自己的執行,即進入堵塞狀态。

    • 正在睡眠:用sleep(long t) 方法可使線程進入睡眠方式。一個睡眠着的線程在指定的時間過去可進入就緒狀态。
    • 當多個線程視圖進入某個同步區域時,沒能進入該同步區域的線程将會被置入鎖定集(Lock Pool),知道獲得該同步區域的鎖。進入就緒。
    • 正在等待:調用wait()方法的對象将會進入阻塞狀态。調用motify()方法回到就緒狀态。調用上述方法時要求線程首先擷取到該對象的鎖。

終止線程的三種方法:

- 使用退出标志,使線程正常退出,也就是方run方法完成後線程終止,推薦使用

- 使用stop方法強行終止(不推薦,可能發生不可預料的結果)

- 使用interrupt方法中斷線程

繼續閱讀