真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

今天就跟大家聊聊有關(guān)java線程有哪幾種幾種狀態(tài),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

創(chuàng)新互聯(lián)公司主打移動網(wǎng)站、網(wǎng)站制作、做網(wǎng)站、網(wǎng)站改版、網(wǎng)絡(luò)推廣、網(wǎng)站維護、域名申請、等互聯(lián)網(wǎng)信息服務(wù),為各行業(yè)提供服務(wù)。在技術(shù)實力的保障下,我們?yōu)榭蛻舫兄Z穩(wěn)定,放心的服務(wù),根據(jù)網(wǎng)站的內(nèi)容與功能再決定采用什么樣的設(shè)計。最后,要實現(xiàn)符合網(wǎng)站需求的內(nèi)容、功能與設(shè)計,我們還會規(guī)劃穩(wěn)定安全的技術(shù)方案做保障。

java線程的5種狀態(tài):1、初始狀態(tài)。2、可運行狀態(tài),位于可運行線程池中,等待被線程調(diào)度選中,獲取cpu的使用權(quán)。3、運行狀態(tài)。4、阻塞狀態(tài),指線程因為某種原因放棄了cpu使用權(quán)。5、死亡狀態(tài),死亡的線程不可再次復(fù)生。

Java中的線程的生命周期大體可分為5種狀態(tài)。

1、初始狀態(tài)(NEW):新創(chuàng)建了一個線程對象。

2、可運行(RUNNABLE):線程對象創(chuàng)建后,其他線程(比如main線程)調(diào)用了該對象的start()方法。該狀態(tài)的線程位于可運行線程池中,等待被線程調(diào)度選中,獲取cpu的使用權(quán) 。

3、運行(RUNNING):可運行狀態(tài)(runnable)的線程獲得了cpu 時間片(timeslice) ,執(zhí)行程序代碼。

4. 阻塞(BLOCKED):阻塞狀態(tài)是指線程因為某種原因放棄了cpu 使用權(quán),也即讓出了cpu timeslice,暫時停止運行。直到線程進入可運行(runnable)狀態(tài),才有機會再次獲得cpu timeslice 轉(zhuǎn)到運行(running)狀態(tài)。阻塞的情況分三種:

(1)、等待阻塞:運行(running)的線程執(zhí)行o.wait()方法,JVM會把該線程放入等待隊列(waitting queue)中。

(2)、同步阻塞:運行(running)的線程在獲取對象的同步鎖時,若該同步鎖被別的線程占用,則JVM會把該線程放入鎖池(lock pool)中。

(3)、其他阻塞:運行(running)的線程執(zhí)行Thread.sleep(long ms)或t.join()方法,或者發(fā)出了I/O請求時,JVM會把該線程置為阻塞狀態(tài)。當(dāng)sleep()狀態(tài)超時、join()等待線程終止或者超時、或者I/O處理完畢時,線程重新轉(zhuǎn)入可運行(runnable)狀態(tài)。

5、死亡(DEAD):線程run()、main() 方法執(zhí)行結(jié)束,或者因異常退出了run()方法,則該線程結(jié)束生命周期。死亡的線程不可再次復(fù)生。

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

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

二、初始狀態(tài)

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

三、可運行狀態(tài)

1、可運行狀態(tài)只是說你資格運行,調(diào)度程序沒有挑選到你,你就永遠(yuǎn)是可運行狀態(tài)。

2、調(diào)用線程的start()方法,此線程進入可運行狀態(tài)。

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

4、當(dāng)前線程時間片用完了,調(diào)用當(dāng)前線程的yield()方法,當(dāng)前線程進入可運行狀態(tài)。

5、鎖池里的線程拿到對象鎖后,進入可運行狀態(tài)。

四、運行狀態(tài)

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

五、死亡狀態(tài)

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

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

六、阻塞狀態(tài)

1、當(dāng)前線程T調(diào)用Thread.sleep()方法,當(dāng)前線程進入阻塞狀態(tài)。

2、運行在當(dāng)前線程里的其它線程t2調(diào)用join()方法,當(dāng)前線程進入阻塞狀態(tài)。

3、等待用戶輸入的時候,當(dāng)前線程進入阻塞狀態(tài)。

七、等待隊列(本是Object里的方法,但影響了線程)

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

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

  • 線程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什么時候能搶到就不知道了。||||| 原本鎖池+第6步被喚醒的線程一起爭搶對象鎖。

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

八、鎖池狀態(tài)

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

當(dāng)一個線程1被另外一個線程2喚醒時,1線程進入鎖池狀態(tài),去爭奪對象鎖。

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

九、幾個方法的比較

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

Thread.yield(),一定是當(dāng)前線程調(diào)用此方法,當(dāng)前線程放棄獲取的cpu時間片,由運行狀態(tài)變會可運行狀態(tài),讓OS再次選擇線程。作用:讓相同優(yōu)先級的線程輪流執(zhí)行,但并不保證一定會輪流執(zhí)行。實際中無法保證yield()達(dá)到讓步目的,因為讓步的線程還有可能被線程調(diào)度程序再次選中。Thread.yield()不會導(dǎo)致阻塞。

t.join()/t.join(long millis),當(dāng)前線程里調(diào)用其它線程1的join方法,當(dāng)前線程阻塞,但不釋放對象鎖,直到線程1執(zhí)行完畢或者millis時間到,當(dāng)前線程進入可運行狀態(tài)。

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

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

看完上述內(nèi)容,你們對java線程有哪幾種幾種狀態(tài)有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


本文名稱:java線程有哪幾種幾種狀態(tài)
地址分享:http://weahome.cn/article/gdeoij.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部