Android基礎(chǔ)線程的多種狀態(tài)

線程有幾種狀態(tài),分別是哪些?

1.New,新建狀態(tài),當程序new了一個線程后,線程就處于新建狀態(tài),此時線程還未啟動;當線程對象調(diào)用start()方法時,線程啟動進入Runnable(就緒狀態(tài))狀態(tài)

2.Runnable狀態(tài):可運行(就緒)狀態(tài);此時線程準備就緒,等待獲取CPU;

3.Running(運行狀態(tài));線程獲取到了cpu,進入運行狀態(tài),執(zhí)行run方法.

4.Blocking(阻塞狀態(tài)) 線程調(diào)用了slepp()方法,會主動放棄cpu資源;當阻塞結(jié)束時,該線程將會到就緒狀態(tài),而非直接進入運行狀態(tài).

5.Dead狀態(tài),也就是死亡狀態(tài);線程的run方法結(jié)束,就會進入dead狀態(tài),線程死亡后不能作為線程再次調(diào)用;

sleep讓當前線程進入休眠狀態(tài)(但線程不會釋放已獲取的鎖),從休眠狀態(tài)“蘇醒”后,線程會進入到Runnable狀態(tài)。

wait()//交出cpu,讓CPU去執(zhí)行其他的任務(wù),讓線程進入阻塞狀態(tài),同時也會釋放鎖

yield()//使當前線程交出CPU,讓CPU去執(zhí)行其他的任務(wù),但不會是線程進入阻塞狀態(tài),而是重置為就緒狀態(tài),yield方法不會釋放鎖

wait和sleep的區(qū)別:

1.sleep是thread類的靜態(tài)方法,而wait是object的

2.最主要是sleep方法沒有釋放鎖,而wait方法釋放了鎖,使其他線程可以使用同步控制塊或者方法

3.sleep必須捕獲異常,而wait,notify和notifyAll不需要捕獲異常。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 寫在前面的話: 這篇博客是我從這里“轉(zhuǎn)載”的,為什么轉(zhuǎn)載兩個字加“”呢?因為這絕不是簡單的復制粘貼,我花了五六個小...
    SmartSean閱讀 4,946評論 12 45
  • Java多線程學習 [-] 一擴展javalangThread類 二實現(xiàn)javalangRunnable接口 三T...
    影馳閱讀 3,108評論 1 18
  • 本文主要講了java中多線程的使用方法、線程同步、線程數(shù)據(jù)傳遞、線程狀態(tài)及相應的一些線程函數(shù)用法、概述等。 首先講...
    李欣陽閱讀 2,597評論 1 15
  • 該文章轉(zhuǎn)自:http://blog.csdn.net/evankaka/article/details/44153...
    加來依藍閱讀 7,469評論 3 87
  • 本文出自 Eddy Wiki ,轉(zhuǎn)載請注明出處:http://eddy.wiki/interview-java.h...
    eddy_wiki閱讀 2,298評論 0 14

友情鏈接更多精彩內(nèi)容