Liver's Java
          我不夠貪心!其實(shí)我應(yīng)該明白,心有多貪,舞臺(tái)就會(huì)有多大!堅(jiān)持!奮斗!
          posts - 4,  comments - 6,  trackbacks - 0
          今天有同事問到線程的問題,自己突然就有點(diǎn)蒙了,只模糊的記得個(gè)大概。
          當(dāng)初學(xué)習(xí)線程的時(shí)候把這7個(gè)狀態(tài)記得比自己名字還熟悉
          還把這7個(gè)狀態(tài)編成了一段凄慘而美麗的愛情故事
          沒想到如今卻只能記得個(gè)大概
          真驗(yàn)證了“好記性不如爛筆頭”的真理
          還是趕快回憶一下吧

          先從圖片開始


          小小的作下解釋:
          1、線程的實(shí)現(xiàn)有兩種方式,一是繼承Thread類,二是實(shí)現(xiàn)Runnable接口,但不管怎樣,當(dāng)我們new了這個(gè)對(duì)象后,線程就進(jìn)入了初始狀態(tài)
          2、當(dāng)該對(duì)象調(diào)用了start()方法,就進(jìn)入可運(yùn)行狀態(tài)
          3、進(jìn)入可運(yùn)行狀態(tài)后,當(dāng)該對(duì)象被操作系統(tǒng)選中,獲得CPU時(shí)間片就會(huì)進(jìn)入運(yùn)行狀態(tài)
          4、進(jìn)入運(yùn)行狀態(tài)后情況就比較復(fù)雜了
              4.1、run()方法或main()方法結(jié)束后,線程就進(jìn)入終止?fàn)顟B(tài)
              4.2、當(dāng)線程調(diào)用了自身的sleep()方法或其他線程的join()方法,就會(huì)進(jìn)入阻塞狀態(tài)(該狀態(tài)既停止當(dāng)前線程,但并不釋放所占有的資源)。當(dāng)sleep()結(jié)束或join()結(jié)束后,該線程進(jìn)入可運(yùn)行狀態(tài),繼續(xù)等待OS分配時(shí)間片;
              4.3、線程調(diào)用了yield()方法,意思是放棄當(dāng)前獲得的CPU時(shí)間片,回到可運(yùn)行狀態(tài),這時(shí)與其他進(jìn)程處于同等競(jìng)爭(zhēng)狀態(tài),OS有可能會(huì)接著又讓這個(gè)進(jìn)程進(jìn)入運(yùn)行狀態(tài);
             4.4、當(dāng)線程剛進(jìn)入可運(yùn)行狀態(tài)(注意,還沒運(yùn)行),發(fā)現(xiàn)將要調(diào)用的資源被synchroniza(同步),獲取不到鎖標(biāo)記,將會(huì)立即進(jìn)入鎖池狀態(tài),等待獲取鎖標(biāo)記(這時(shí)的池里也許已經(jīng)有了其他線程在等待獲取標(biāo)記,這時(shí)它們處于隊(duì)列狀態(tài),既先到先得),一旦線程獲得標(biāo)記后,就轉(zhuǎn)入可運(yùn)行狀態(tài),等待OS分配CPU時(shí)間片;
             4.5、當(dāng)線程調(diào)用wait()方法后會(huì)進(jìn)入等待隊(duì)列(進(jìn)入這個(gè)狀態(tài)會(huì)釋放所占有的所有資源,與阻塞狀態(tài)不同),進(jìn)入這個(gè)狀態(tài)后,是不能自動(dòng)喚醒的,必須依靠其他線程調(diào)用notify()或notifyAll()方法才能被喚醒(由于notify()只是喚醒一個(gè)線程,但我們由不能確定具體喚醒的是哪一個(gè)線程,也許我們需要喚醒的線程不能夠被喚醒,因此在實(shí)際使用時(shí),一般都用notifyAll()方法,喚醒有所線程),線程被喚醒后會(huì)進(jìn)入鎖池,等待獲取鎖標(biāo)記。

          總算全部回憶了一遍JDK1.5在API的使用上有了較好的改進(jìn),效率得到很大的提高,不過幾個(gè)狀態(tài)轉(zhuǎn)換的原理還是一樣。

          額……不過那一段凄慘而美麗的愛情故事還沒完全想起來,那天全部回憶起來了在寫吧。
          posted on 2009-06-04 00:06 Liver 閱讀(2194) 評(píng)論(2)  編輯  收藏 所屬分類: CoreJava

          FeedBack:
          # re: 線程7種狀態(tài)的相互轉(zhuǎn)換
          2009-06-26 12:08 | yjw
          # re: 線程7種狀態(tài)的相互轉(zhuǎn)換
          2013-03-19 17:15 | 11
          不錯(cuò)不錯(cuò),分析的好。  回復(fù)  更多評(píng)論
            

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          <2013年3月>
          242526272812
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          常用鏈接

          留言簿

          隨筆分類(5)

          隨筆檔案(5)

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 井冈山市| 玉溪市| 阜阳市| 中宁县| 仪陇县| 泗洪县| 武功县| 黄山市| 冕宁县| 沧州市| 盘山县| 全南县| 东兰县| 合阳县| 望江县| 崇左市| 江川县| 蒙自县| 达日县| 霍州市| 正阳县| 沧州市| 高台县| 和田市| 会同县| 海盐县| 互助| 理塘县| 宜城市| 平顺县| 许昌县| 抚宁县| 荣昌县| 双城市| 濮阳县| 平武县| 赤水市| 中西区| 海淀区| 吉林市| 神农架林区|