老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)

java有哪些線程狀態(tài)

這篇文章主要介紹“java有哪些線程狀態(tài)”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“java有哪些線程狀態(tài)”文章能幫助大家解決問題。

成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),晉城企業(yè)網(wǎng)站建設(shè),晉城品牌網(wǎng)站建設(shè),網(wǎng)站定制,晉城網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,晉城網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

java有6種線程狀態(tài):初始(NEW)、運行(RUNNABLE)、阻塞(BLOCKED)、等待(WAITING)、超時等待(TIMED_WAITING)、終止(TERMINATED)。用new關(guān)鍵字新建一個線程,但還沒有調(diào)用start()方法,這個線程就處于新建狀態(tài);阻塞狀態(tài)表示線程正等待監(jiān)視器鎖,而陷入的狀態(tài);進入等待狀態(tài)的線程需要等待其他線程做出一些特定動作(通知或中斷)。

Java中線程的狀態(tài)分為6種:

1. 初始(NEW):新創(chuàng)建了一個線程對象,但還沒有調(diào)用start()方法。
2. 運行(RUNNABLE):Java線程中將就緒(ready)和運行中(running)兩種狀態(tài)籠統(tǒng)的稱為“運行”。
線程對象創(chuàng)建后,其他線程(比如main線程)調(diào)用了該對象的start()方法。該狀態(tài)的線程位于可運行線程池中,等待被線程調(diào)度選中,獲取CPU的使用權(quán),此時處于就緒狀態(tài)(ready)。就緒狀態(tài)的線程在獲得CPU時間片后變?yōu)檫\行中狀態(tài)(running)。
3. 阻塞(BLOCKED):表示線程阻塞于鎖。
4. 等待(WAITING):進入該狀態(tài)的線程需要等待其他線程做出一些特定動作(通知或中斷)。
5. 超時等待(TIMED_WAITING):該狀態(tài)不同于WAITING,它可以在指定的時間后自行返回。
6. 終止(TERMINATED):表示該線程已經(jīng)執(zhí)行完畢。

這6種狀態(tài)定義在Thread類的State枚舉中,可查看源碼進行一一對應(yīng)。

一、線程的狀態(tài)圖

java有哪些線程狀態(tài)

二、狀態(tài)詳細說明

1. 初始狀態(tài)(NEW)

實現(xiàn)Runnable接口和繼承Thread可以得到一個線程類,new一個實例出來,線程就進入了初始狀態(tài)。

2.1. 就緒狀態(tài)(RUNNABLE之READY)

  • 就緒狀態(tài)只是說你資格運行,調(diào)度程序沒有挑選到你,你就永遠是就緒狀態(tài)。

  • 調(diào)用線程的start()方法,此線程進入就緒狀態(tài)。

  • 當(dāng)前線程sleep()方法結(jié)束,其他線程join()結(jié)束,等待用戶輸入完畢,某個線程拿到對象鎖,這些線程也將進入就緒狀態(tài)。

  • 當(dāng)前線程時間片用完了,調(diào)用當(dāng)前線程的yield()方法,當(dāng)前線程進入就緒狀態(tài)。

  • 鎖池里的線程拿到對象鎖后,進入就緒狀態(tài)。

2.2. 運行中狀態(tài)(RUNNABLE之RUNNING)

線程調(diào)度程序從可運行池中選擇一個線程作為當(dāng)前線程時線程所處的狀態(tài)。這也是線程進入運行狀態(tài)的唯一的一種方式。

3. 阻塞狀態(tài)(BLOCKED)

阻塞狀態(tài)是線程阻塞在進入synchronized關(guān)鍵字修飾的方法或代碼塊(獲取鎖)時的狀態(tài)。

4. 等待(WAITING)

處于這種狀態(tài)的線程不會被分配CPU執(zhí)行時間,它們要等待被顯式地喚醒,否則會處于無限期等待的狀態(tài)。

5. 超時等待(TIMED_WAITING)

處于這種狀態(tài)的線程不會被分配CPU執(zhí)行時間,不過無須無限期等待被其他線程顯示地喚醒,在達到一定時間后它們會自動喚醒。

6. 終止?fàn)顟B(tài)(TERMINATED)

  • 當(dāng)線程的run()方法完成時,或者主線程的main()方法完成時,我們就認(rèn)為它終止了。這個線程對象也許是活的,但是它已經(jīng)不是一個單獨執(zhí)行的線程。線程一旦終止了,就不能復(fù)生。

  • 在一個終止的線程上調(diào)用start()方法,會拋出java.lang.IllegalThreadStateException異常。

三、等待隊列

  • 調(diào)用obj的wait(), notify()方法前,必須獲得obj鎖,也就是必須寫在synchronized(obj) 代碼段內(nèi)。

  • 與等待隊列相關(guān)的步驟和圖

java有哪些線程狀態(tài)

  • 線程1獲取對象A的鎖,正在使用對象A。

  • 線程1調(diào)用對象A的wait()方法。

  • 線程1釋放對象A的鎖,并馬上進入等待隊列。

  • 鎖池里面的對象爭搶對象A的鎖。

  • 線程5獲得對象A的鎖,進入synchronized塊,使用對象A。

  • 線程5調(diào)用對象A的notifyAll()方法,喚醒所有線程,所有線程進入同步隊列。若線程5調(diào)用對象A的notify()方法,則喚醒一個線程,不知道會喚醒誰,被喚醒的那個線程進入同步隊列。

  • notifyAll()方法所在synchronized結(jié)束,線程5釋放對象A的鎖。

  • 同步隊列的線程爭搶對象鎖,但線程1什么時候能搶到就不知道了。

四、同步隊列狀態(tài)

  • 當(dāng)前線程想調(diào)用對象A的同步方法時,發(fā)現(xiàn)對象A的鎖被別的線程占有,此時當(dāng)前線程進入同步隊列。簡言之,同步隊列里面放的都是想爭奪對象鎖的線程。

  • 當(dāng)一個線程1被另外一個線程2喚醒時,1線程進入同步隊列,去爭奪對象鎖。

  • 同步隊列是在同步的環(huán)境下才有的概念,一個對象對應(yīng)一個同步隊列。

  • 線程等待時間到了或被notify/notifyAll喚醒后,會進入同步隊列競爭鎖,如果獲得鎖,進入RUNNABLE狀態(tài),否則進入BLOCKED狀態(tài)等待獲取鎖。

五、幾個方法的比較

  • Thread.sleep(long millis),一定是當(dāng)前線程調(diào)用此方法,當(dāng)前線程進入TIMED_WAITING狀態(tài),但不釋放對象鎖,millis后線程自動蘇醒進入就緒狀態(tài)。作用:給其它線程執(zhí)行機會的最佳方式。

  • Thread.yield(),一定是當(dāng)前線程調(diào)用此方法,當(dāng)前線程放棄獲取的CPU時間片,但不釋放鎖資源,由運行狀態(tài)變?yōu)榫途w狀態(tài),讓OS再次選擇線程。作用:讓相同優(yōu)先級的線程輪流執(zhí)行,但并不保證一定會輪流執(zhí)行。實際中無法保證yield()達到讓步目的,因為讓步的線程還有可能被線程調(diào)度程序再次選中。Thread.yield()不會導(dǎo)致阻塞。該方法與sleep()類似,只是不能由用戶指定暫停多長時間。

  • thread.join()/thread.join(long millis),當(dāng)前線程里調(diào)用其它線程t的join方法,當(dāng)前線程進入WAITING/TIMED_WAITING狀態(tài),當(dāng)前線程不會釋放已經(jīng)持有的對象鎖。線程t執(zhí)行完畢或者millis時間到,當(dāng)前線程一般情況下進入RUNNABLE狀態(tài),也有可能進入BLOCKED狀態(tài)(因為join是基于wait實現(xiàn)的)。

  • obj.wait(),當(dāng)前線程調(diào)用對象的wait()方法,當(dāng)前線程釋放對象鎖,進入等待隊列。依靠notify()/notifyAll()喚醒或者wait(long timeout) timeout時間到自動喚醒。

  • obj.notify()喚醒在此對象監(jiān)視器上等待的單個線程,選擇是任意性的。notifyAll()喚醒在此對象監(jiān)視器上等待的所有線程。

  • LockSupport.park()/LockSupport.parkNanos(long nanos),LockSupport.parkUntil(long deadlines), 當(dāng)前線程進入WAITING/TIMED_WAITING狀態(tài)。對比wait方法,不需要獲得鎖就可以讓線程進入WAITING/TIMED_WAITING狀態(tài),需要通過LockSupport.unpark(Thread thread)喚醒。

關(guān)于“java有哪些線程狀態(tài)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。


分享名稱:java有哪些線程狀態(tài)
鏈接URL:http://www.xueling.net.cn/article/iigsdi.html

其他資訊

在線咨詢
服務(wù)熱線
服務(wù)熱線:028-86922220
TOP
主站蜘蛛池模板: 女女同性一区二区三区免费观看 | 西出玉门在线观看 | 91视频-全网资源最全平台 | 国产欧美日本AⅤ精品 | 蜜臀久久99精品久久一区二区 | 午夜福利在线永久视频 | 日本丰满熟妇BBXBBXHD | 亚洲欧美又粗又长久久久 | 被医生绑在妇科椅调教 | 最新中文字幕av无码专区不 | 被黑人的巨茎日出白浆 | 五月激情婷婷丁香综合基地 | 亚洲a一区二区 | 欧美激情黑白配 | 91插插插影库永久免费 | 精品专区一区二区 | 美女h片 | 噼里啪啦动漫在线观看免费 | 亚洲性猛交 | 懂色av一区二区三区四区五区 | 亚洲天堂男 | 遮天在哪个软件可以免费阅读 | 九九爱精品 | 日韩av免费中文字幕 | 日本在线免费 | 国产一区在线免费观看 | 91久草视频 | 性爱视频在线播放 | 久久艹一区 | 在线观看成人无码中文AV天堂不卡 | 欧洲免费一区二区三区视频 | 国产成社区在线视频观看 | 亚洲制服丝袜欧美 | 奇米第四色7777 | 久久精品小视频 | 免看美女网站色 | 97夜夜澡人人爽人人喊91洗澡 | 黄色免费观看网址 | 新普新京亚洲欧美日韩国产 | 欧美高清视频看片在线观看 | 麻豆蜜桃av|