java線程的狀態
A. java中線程有哪五個基本狀態它們之間如何讓轉化
java中,每個線程都需經歷新生、就緒、運行、阻塞和死亡五種狀態,線程從新生到死亡的狀態變化稱為生命周期。
用new運算符和Thread類或其子類建立一個線程對象後,該線程就處於新生狀態。
新生--->就緒:通過調用start()方法
就緒--->運行:處於就緒狀態的線程一旦得到CPU,就進入運行狀態並自動調用自己的run()方法
運行--->阻塞:處於運行狀態的線程,執行sleep()方法,或等待I/O設備資源,讓出CPU並暫時中止自己運行,進入阻塞狀態
阻塞--->就緒:睡眠時間已到,或等待的I/O設備空閑下來,線程便進入就緒狀態,重新到就緒隊列中等待CPU。當再次獲得CPU時,便從原來中止位置開始繼續運行。
運行--->死亡:(1)(正常情況下)線程任務完成
(2)(非正常狀況)線程被強制性的中止,如通過執行stop()或destroy()方法來終止一個線程
B. java線程有哪些狀態
新生、就緒、運行、阻塞和死亡
java中,每個線程都需經歷新生、就緒、運行、阻塞和死亡五種狀態,線程從新生到死亡的狀態變化稱為生命周期。
C. JavaThread線程的狀態有哪些
[1]新生狀態(New):當一個線程的實例被創建即使用new關鍵字和Thread類或其子類創建一個線程對象後,此時該線程處於新生(new)狀態,處於新生狀態的線程有自己的內存空間,但該線程並沒有運行,此時線程還不是活著的(notalive)。
[2]就緒狀態(Runnable):通過調用線程實例的start()方法來啟動線程使線程進入就緒狀態(runnable);處於就緒狀態的線程已經具備了運行條件,但還沒有被分配到CPU即不一定會被立即執行,此時處於線程就緒隊列,等待系統為其分配CPCU,等待狀態並不是執行狀態;此時線程是活著的(alive)。
[3]運行狀態(Running):一旦獲取CPU(被JVM選中),線程就進入運行(running)狀態,線程的run()方法才開始被執行;在運行狀態的線程執行自己的run()方法中的操作,直到調用其他的方法而終止、或者等待某種資源而阻塞、或者完成任務而死亡;如果在給定的時間片內沒有執行結束,就會被系統給換下來回到線程的等待狀態;此時線程是活著的(alive)。
[4]阻塞狀態(Blocked):通過調用join()、sleep()、wait()或者資源被暫用使線程處於阻塞(blocked)狀態;處於Blocking狀態的線程仍然是活著的(alive)。
[5]死亡狀態(Dead):當一個線程的run()方法運行完畢或被中斷或被異常退出,該線程到達死亡(dead)狀態。此時可能仍然存在一個該Thread的實例對象,當該Thread已經不可能在被作為一個可被獨立執行的線程對待了,線程的獨立的callstack已經被dissolved。一旦某一線程進入Dead狀態,他就再也不能進入一個獨立線程的生命周期了。對於一個處於Dead狀態的線程調用start()方法,會出現一個運行期(runtimeexception)的異常;處於Dead狀態的線程不是活著的(notalive)。
D. JAVA中,線程有哪五個基本狀態他們之間如何讓轉化並簡述線程周期。
java中,每個線程都需經歷新生、就緒、運行、阻塞和死亡五種狀態,線程從新生到死亡的狀態變化稱為生命周期。
用new運算符和Thread類或其子類建立一個線程對象後,該線程就處於新生狀態。
E. java線程中的幾種狀態以及相互轉換
NEW:線程創建之後,但是還沒有啟動(notyetstarted)。
RUNNABLE:正在Java虛擬機下跑任務的線程的狀態。在RUNNABLE狀態下的線程可能會處於等待狀態,因為它正在等待一些系統資源的釋放,比如IO
BLOCKED:阻塞狀態,等待鎖的釋放,比如線程A進入了一個synchronized方法,線程B也想進入這個方法,但是這個方法的鎖已經被線程A獲取了,這個時候線程B就處於BLOCKED狀態
WAITING:等待狀態,處於等待狀態的線程是由於執行了3個方法中的任意方法。1.Object的wait方法,並且沒有使用timeout參數;2.Thread的join方法,沒有使用timeout參數3.LockSupport的park方法。處於waiting狀態的線程會等待另外一個線程處理特殊的行為。再舉個例子,如果一個線程調用了一個對象的wait方法,那麼這個線程就會處於waiting狀態直到另外一個線程調用這個對象的notify或者notifyAll方法後才會解除這個狀態
TIMED_WAITING:有等待時間的等待狀態,比如調用了以下幾個方法中的任意方法,並且指定了等待時間,線程就會處於這個狀態。1.Thread.sleep方法2.Object的wait方法,帶有時間3.Thread.join方法,帶有時間4.LockSupport的parkNanos方法,帶有時間5.LockSupport的parkUntil方法,帶有時間
TERMINATED:線程中止的狀態,這個線程已經完整地執行了它的任務
F. java 線程有哪些狀態,這些狀態之間是如何轉化的
線程在它的生命周期中會處於各種不同的狀態:
新建、等待、就緒、運行、阻塞、死亡。
1 新建
用new語句創建的線程對象處於新建狀態,此時它和其他java對象一樣,僅被分配了內存。
2等待
當線程在new之後,並且在調用start方法前,線程處於等待狀態。
3 就緒
當一個線程對象創建後,其他線程調用它的start()方法,該線程就進入就緒狀態。處於這個狀態的線程位於Java虛擬機的可運行池中,等待cpu的使用權。
4 運行狀態
處於這個狀態的線程佔用CPU,執行程序代碼。在並發運行環境中,如果計算機只有一個CPU,那麼任何時刻只會有一個線程處於這個狀態。
只有處於就緒狀態的線程才有機會轉到運行狀態。
5 阻塞狀態
阻塞狀態是指線程因為某些原因放棄CPU,暫時停止運行。當線程處於阻塞狀態時,Java虛擬機不會給線程分配CPU,直到線程重新進入就緒狀態,它才會有機會獲得運行狀態。
6 死亡狀態
當線程執行完run()方法中的代碼,或者遇到了未捕獲的異常,就會退出run()方法,此時就進入死亡狀態,該線程結束生命周期。
由於java線程調度不是分時的,如果程序希望干預java虛擬機對線程的調度過程,從而明確地讓一個線程給另外一個線程運行的機會,可以採用以下的方法
1 調整各個線程的優先順序
2 讓處於運行狀態的線程調用Thread.sleep(long time)方法 放棄CPU 進入阻塞狀態。
sleep方法可能拋出InterruptedException
線程休眠後只能在指定的時間後使線程處於就緒狀態。(也就是等待cpu的調度)
3 讓處於運行狀態的線程調用Thread.yield()方法 只會同優先順序讓步或更高優先順序讓步,進入就緒狀態。
4 讓處於運行狀態的線程調用另一個線程的join()方法
當前運行的線程可以調用另一個線程的join()方法,當前運行的線程將轉到阻塞狀態,直至另一個線程運行結束,它才會轉到就緒狀態 從而有機會恢復運行。
通過一下幾種途徑中的一種,線程可以從被阻塞狀態到可運行狀態。
1 線程被置於睡眠狀態,且已經經過指定的毫秒數。
2 線程正在等待I/O操作的完成,且該操作已經完成。
3 線程正在等待另一個線程所持有的鎖,且另一個線程已經釋放該鎖的所有權;(也有可能等待超時。當超時發生時,線程解除阻塞。)
4 線程正在等待某個觸發條件,且另一個線程發出了信號表明條件已經發生了變化。(如果為線程的等待設置了一個超時,那麼當超時發生時該線程將解除阻塞。)
5 線程已經被掛起,且有人調用了它的resume方法。不過,由於suspend方法已經過時,resume方法也就隨之被棄用了,你不應該在自己的代碼里調用它。(現在應該用sleep取而代之。)
G. 【Java基礎】線程生命周期有哪些階段
Java線程具有五中基本狀態
新建狀態(New):當線程對象對創建後,即進入了新建狀態,如:Thread t = new MyThread();
就緒狀態(Runnable):當調用線程對象的start()方法(t.start();),線程即進入就緒狀態。處於就緒狀態的線程,只是說明此線程已經做好了准備,隨時等待CPU調度執行,並不是說執行了t.start()此線程立即就會執行;
運行狀態(Running):當CPU開始調度處於就緒狀態的線程時,此時線程才得以真正執行,即進入到運行狀態。註:就 緒狀態是進入到運行狀態的唯一入口,也就是說,線程要想進入運行狀態執行,首先必須處於就緒狀態中;
阻塞狀態(Blocked):處於運行狀態中的線程由於某種原因,暫時放棄對CPU的使用權,停止執行,此時進入阻塞狀態,直到其進入到就緒狀態,才 有機會再次被CPU調用以進入到運行狀態。根據阻塞產生的原因不同,阻塞狀態又可以分為三種:
1.等待阻塞:運行狀態中的線程執行wait()方法,使本線程進入到等待阻塞狀態;
2.同步阻塞 -- 線程在獲取synchronized同步鎖失敗(因為鎖被其它線程所佔用),它會進入同步阻塞狀態;
3.其他阻塞 -- 通過調用線程的sleep()或join()或發出了I/O請求時,線程會進入到阻塞狀態。當sleep()狀態超時、join()等待線程終止或者超時、或者I/O處理完畢時,線程重新轉入就緒狀態。
死亡狀態(Dead):線程執行完了或者因異常退出了run()方法,該線程結束生命周期。
H. 基於java 線程的幾種狀態
下面是java 線程的5種狀態:
1、新建(new)
新建一個線程的對象。
2、可運行(runable)
線程對象創建後,其他線程調用該線程的start方法。或者該線程位於可運行線程池中等待被線程調用,已獲取cpu的使用權。
3、運行(running)
可運行的線程獲取了cpu的使用權,執行程序代碼
4、阻塞(block)
由於某些原因該線程放棄了cpu的使用權。停止執行。除非線程進入可運行的狀態,才會有機會獲取cpu的使用權。
(1)等待阻塞:運行中的線程執行wait方法,這時候該線程會被放入等待隊列。
(2)同步阻塞:運行中的線程獲取同步鎖,如果該同步鎖被別的線程佔用,這個線程會成被放入鎖池,等待其他線程釋放同步鎖。
(3)其他阻塞:運行的線程執行sleep或者join方法這個線程會成為阻塞狀態。當sleep超時,join等待線程終止,該線程會進入可運行狀態。
5、死亡(dead)
線程run mian 執行完畢後,或者因為某些異常產生退出了 run 方法,該線程的生命周期結束。
I. Java中,線程是什麼意思,多線程又是什麼
在計算機中當一個程序運行的時候就會創建至少一個進程,例如當我們運行QQ的時候,系統就會創建進程來處理我們平時的一些操作,當我們打開任務管理器的時候,在進程的列表裡面就可以找到QQ.exe的運行程序;
在計算機中處理進程之外還有另一個概念就是線程,線程是存在於進程當中,一個進程可以包含多個線程;當我們的計算機有多核處理器的時候,使用多線程可以加快程序的運算速率;如果一個進程中只有一個線程,當程序遇到一個比較耗時的計算的時候,由於程序是單線程的,那麼程序只能等待這個運算結束的時候再繼續運行,這樣會大大的降低程序的效率;當時用多個線程的時候,在某個線程遇到比較耗時的運算的時候,該線程可以繼續自己的運算,但是其他的線程也可以同步進行,這樣當耗時的計算結束之後,其他線程也將自己所需要的東西執行完畢,這樣就會很大的提高程序執行效率;
在程序運行中對於文件的保存相對於處理器的運算速度來說是很慢的,當我們程序中接收到一個保存文件的信息之後,我們可以創建一個保存文件的線程,在主線程中我們可以繼續進行我們的其他運算,這樣當文件保存好之後,我們的其他運算也會完成,互不影響;
在Java中我們可以創建一個自己的類繼承於Thread類,並且重寫run() 方法,當線程啟動之後,run()方法裡面的操作都在線程中進行處理,而不會影響主線程的信息;
當我們創建好一個自定義線程類之後,我們可以創建這個自定義線程的對象,進行線程的啟動;線程須調用start();方法進行啟動,這樣run()方法裡面的內容才會在線程中運行;如果我們不去調用start()方法,那我們只是創建了一個普通的類,即使我們手動調用run()方法,run()方法裡面的內容也不會在線程中運行;
在Java中線程主要有初始狀態,運行狀態,阻塞狀態,終止狀態等;當我們新創建一個線程對象的時候,此時線程的狀態為初始狀態;當我們調用start()之後,此時的線程才被激活成為運行狀態,之後run()方法裡面的信息才會在子線程中運行;我們可以在不同的階段調用不同的方法將線程設置為不同的狀態;比如有時候我們的操作需要等待其他線程中運算結束之後才可以繼續進行,這時候我們就可以將線程設置為等待狀態,當需要的資源滿足條件之後,可以繼續運行當前的線程;
以上的內容就是關於Java中線程是什麼,更多關於Java方面的問題可以看下這個視頻教程:網頁鏈接,希望我的回答能幫到你。
J. Java中線程的幾種可用狀態有哪些請大家解釋一下。
線程在執行過程中,可以處於下面幾種狀態:
1、就緒(Runnable):線程准備運行,不一定立馬就能開始執行。
2、運行中(Running):進程正在執行線程的代碼。
3、等待中(Waiting):線程處於阻塞的狀態,等待外部的處理結束。
4、睡眠中(Sleeping):線程被強制睡眠。
5、I/O阻塞(BlockedonI/O):等待I/O操作完成。
6、同步阻塞(BlockedonSynchronization):等待獲取鎖。
7、死亡(Dead):線程完成了執行。