成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Thread源碼

Barrior / 1315人閱讀

摘要:返回的是當(dāng)前線程即執(zhí)行這行代碼時(shí)所在的線程。告訴調(diào)度器當(dāng)前線程即執(zhí)行該行代碼所在的線程愿意放棄使用。只有在當(dāng)前線程持有自己的對(duì)象鎖時(shí)才能調(diào)用此方法,調(diào)用后就會(huì)釋放所持有的對(duì)象鎖和占用的資源,等待后才有可能再次獲取到所持有的對(duì)象鎖。

在Andorid-27中查看Thread源碼
第一次看Thread源碼的時(shí)候,很是懵,看源碼里面的注釋感覺(jué)實(shí)在無(wú)法理解,隨后在網(wǎng)上看各種關(guān)于Thread的講解,感覺(jué)這篇文章講的挺好的(文章地址:https://segmentfault.com/a/11...),對(duì)一些不理解的地方有所了解,然后再自己接著看源碼。

public static native Thread currentThread():Thread.currentThread()返回的是當(dāng)前線程(即執(zhí)行這行代碼時(shí)所在的線程)。

public static native void yield():Thread.yield():告訴調(diào)度器當(dāng)前線程(即執(zhí)行該行代碼所在的線程)愿意放棄使用CPU。但是調(diào)度器可以同意也可以不同意,就是你表達(dá)了你的意愿,但怎么做是我的事。

public static void sleep(long millis, int nanos)


從上圖中可以看出調(diào)用sleep方法后,當(dāng)前線程陷入死循環(huán)中并持有對(duì)象鎖直到millis時(shí)間過(guò)去,才開(kāi)始向下執(zhí)行。
Thread.sleep(millis):當(dāng)前線程(即執(zhí)行該行代碼所在的線程)放棄它所占有的資源不再執(zhí)行,但依然擁有對(duì)象鎖,此時(shí)當(dāng)前線程處TIMED_WAITING狀態(tài),等到millis后,就變成就緒狀態(tài),等待分配CPU,分配到CPU就從sleep的地方開(kāi)始向下執(zhí)行。

public synchronized void start() :調(diào)用start方法后,線程處于就緒狀態(tài),等待分配CPU,一旦分配到CPU之后就開(kāi)始執(zhí)行run方法。

public void interrupt() :中斷線程 

public final void join(long millis) throws InterruptedException :這個(gè)比較難理解,創(chuàng)建線程t,t.join加入到當(dāng)前線程(即執(zhí)行該行代碼所在的線程),然后當(dāng)前線程暫停執(zhí)行,若millis=0則當(dāng)前線程處于WAITING狀態(tài),等待加入的線程執(zhí)行完成后,當(dāng)前線程再接著執(zhí)行;若millis>0則當(dāng)前線程處于TIMED_WAITING狀態(tài),最多等待millis后,不論加入的線程是否執(zhí)行完畢,當(dāng)前線程都開(kāi)始繼續(xù)執(zhí)行。

public final native void wait(long millis, int nanos) throws InterruptedException:讓當(dāng)前線程處于BLOCKED狀態(tài)。 只有在當(dāng)前線程持有自己的對(duì)象鎖時(shí)才能調(diào)用此方法,調(diào)用后就會(huì)釋放所持有的對(duì)象鎖和占用的資源,等待millis后才有可能再次獲取到所持有的對(duì)象鎖。

接下來(lái)我們來(lái)看看線程所擁有的幾種狀態(tài)State:

NEW:創(chuàng)建一個(gè)線程,但還未調(diào)用start方法。

RUNNABLE:包含兩種狀態(tài),運(yùn)行狀態(tài)和就緒狀態(tài),就緒狀態(tài)就是都準(zhǔn)備好了,等待分配CPU然后去執(zhí)行

BLOCKED:阻塞狀態(tài),等待獲取監(jiān)視器的鎖。在運(yùn)行時(shí)想要運(yùn)行同步方法或同步代碼塊但未獲取到對(duì)應(yīng)的鎖時(shí)會(huì)進(jìn)入到阻塞狀態(tài)。

WAITING:等待狀態(tài)。調(diào)用了wait()/join()/LockSupport.park()后,就會(huì)進(jìn)入該狀態(tài)。

TIMED_WAITING:處于等待狀態(tài)且有具體的等待時(shí)間。調(diào)用了Thread.sleep(long)/wait(long)/join(long)后,就會(huì)進(jìn)入該狀態(tài)。

TERMINATED:線程執(zhí)行完成。


狀態(tài)的切換如上圖所示,參考文章:https://blog.csdn.net/pange19...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72078.html

相關(guān)文章

  • Thread源碼解讀(2)——線程狀態(tài)及常用方法

    摘要:如果線程還存活,線程就無(wú)限期等待,并讓出監(jiān)視器鎖,進(jìn)入狀態(tài)。當(dāng)線程從狀態(tài)被喚醒后通過(guò),或者是假喚醒將繼續(xù)競(jìng)爭(zhēng)監(jiān)視器鎖,當(dāng)成功獲得監(jiān)視器鎖后,他將從調(diào)用的地方恢復(fù),繼續(xù)運(yùn)行。 前言 系列文章目錄 上一篇我們討論了線程的創(chuàng)建,本篇我們來(lái)聊一聊線程的狀態(tài)轉(zhuǎn)換以及常用的幾個(gè)比較重要的方法。 本篇依然是通過(guò)源碼分析來(lái)了解這些知識(shí)。 本文源碼基于jdk1.8 。 閱讀完本文,你應(yīng)當(dāng)有能力回答以...

    luqiuwen 評(píng)論0 收藏0
  • LockSupport源碼閱讀

    摘要:源碼閱讀創(chuàng)建鎖和同步類中使用的基礎(chǔ)的線程阻塞原語(yǔ)除非你是多線程專家,而且你要自己設(shè)計(jì)和實(shí)現(xiàn)阻塞式線程同步機(jī)制比如等等,否則你不需要用和。 LockSupport源碼閱讀 /* * 創(chuàng)建鎖和同步類中使用的基礎(chǔ)的線程阻塞原語(yǔ) * * 除非你是多線程專家,而且你要自己設(shè)計(jì)和實(shí)現(xiàn)阻塞式線程同步機(jī)制(比如lock、condition等等),否則你不需要用park和unpark。這兩個(gè)原語(yǔ)是...

    CastlePeaK 評(píng)論0 收藏0
  • 源碼的角度再學(xué)「Thread

    摘要:前言中的線程是使用類實(shí)現(xiàn)的,在初學(xué)的時(shí)候就學(xué)過(guò)了,也在實(shí)踐中用過(guò),不過(guò)一直沒(méi)從源碼的角度去看過(guò)它的實(shí)現(xiàn),今天從源碼的角度出發(fā),再次學(xué)習(xí),愿此后對(duì)的實(shí)踐更加得心應(yīng)手。如果一個(gè)線程已經(jīng)啟動(dòng)并且尚未死亡,則該線程處于活動(dòng)狀態(tài)。 showImg(https://segmentfault.com/img/remote/1460000017963014?w=1080&h=720); 前言 Java...

    abson 評(píng)論0 收藏0
  • 【開(kāi)發(fā)小記】 Java 線程池 之 被“吃掉”的線程異常(附源碼分析和解決方法)

    摘要:接下來(lái)就是會(huì)把任務(wù)提交到隊(duì)列中給線程池調(diào)度處理因?yàn)橹饕P(guān)心的是這個(gè)線程怎么執(zhí)行,異常的拋出和處理,所以我們暫時(shí)不解析多余的邏輯。 前言 今天遇到了一個(gè)bug,現(xiàn)象是,一個(gè)任務(wù)放入線程池中,似乎沒(méi)有被執(zhí)行,日志也沒(méi)有打。 經(jīng)過(guò)本地代碼調(diào)試之后,發(fā)現(xiàn)在任務(wù)邏輯的前半段,拋出了NPE,但是代碼外層沒(méi)有try-catch,導(dǎo)致這個(gè)異常被吃掉。 這個(gè)問(wèn)題解決起來(lái)是很簡(jiǎn)單的,外層加個(gè)try-cat...

    Soarkey 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<