Ⅰ 基於java 線程的幾種狀態
下面是java 線程的5種狀態:
1、新建(new)
新建一個線程的對象。
2、可運行(runable)
線程對象創建後,其他專線程調用該線程的start方法。或者該線程位於可運行線屬程池中等待被線程調用,已獲取cpu的使用權。
3、運行(running)
4、阻塞(block)
由於某些原因該線程放棄了cpu的使用權。停止執行。除非線程進入可運行的狀態,才會有機會獲取cpu的使用權。
(1)等待阻塞:運行中的線程執行wait方法,這時候該線程會被放入等待隊列。
(2)同步阻塞:運行中的線程獲取同步鎖,如果該同步鎖被別的線程佔用,這個線程會成被放入鎖池,等待其他線程釋放同步鎖。
(3)其他阻塞:運行的線程執行sleep或者join方法這個線程會成為阻塞狀態。當sleep超時,join等待線程終止,該線程會進入可運行狀態。
5、死亡(dead)
線程run mian 執行完畢後,或者因為某些異常產生退出了 run 方法,該線程的生命周期結束。
Ⅱ Java 里如何實現線程間通信
Java多線程間的通信
Java還提供了一種線程間通信的機制,這種通信通什麼實現?
wait,notify等機制
或使用pipeInputStream和pipeOutputStream
1. 線程的幾種狀態
線程有四種狀態,任何一個線程肯定處於這四種狀態中的一種:
1) 產生(New):線程對象已經產生,但尚未被啟動,所以無法執行。如通過new產生了一個線程對象後沒對它調用start()函數之前。
2) 可執行(Runnable):每個支持多線程的系統都有一個排程器,排程器會從線程池中選擇一個線程並啟動它。當一個線程處於可執行狀態時,表示它可能正處於線程池中等待排排程器啟動它;也可能它已正在執行。如執行了一個線程對象的start()方法後,線程就處於可執行狀態,但顯而易見的是此時線程不一定正在執行中。
3) 死亡(Dead):當一個線程正常結束,它便處於死亡狀態。如一個線程的run()函數執行完畢後線程就進入死亡狀態。
4) 停滯(Blocked):當一個線程處於停滯狀態時,系統排程器就會忽略它,不對它進行排程。
Ⅲ Java中線程的幾種可用狀態有哪些請大家解釋一下。
我理解的有5種:
1、創建,剛創建出線程對象,比如new Thread()
2、就緒,調用了start方法,但內此時並不是調用就立馬被運行,容在這期間要讓cpu執行你,在等待執行過程叫就緒也叫等待。cpu並不是立馬執行,而是串列以極快速度切換進程的運行著
3、運行,正在運行了,創建出線程,脫離了主線程,進入run,天高任鳥飛
4、死亡,異常終止,或run執行完畢
5、阻塞,運行過程中,交出cpu執行權休眠。為什麼要休眠?某些某些特定的條件等待條件成熟,這時候手動讓線程休眠進入阻塞狀態
線程之間但狀態是可任意轉換的,阻塞醒來就是就緒,運行中又阻塞,就緒運行死亡,等狀態可切換。
還有一種是進程的狀態
1、就緒,創建子進程,等待cpu調度執行
2、運行,運行程序
3、僵屍,運行完畢死亡等待收屍
3、暫停,被信號暫停,等待信號喚醒
4、阻塞,等待條件成熟,人為休眠。條件滿足或喚醒
進程和線程狀態,非常類似