本文目錄一覽:
- 1、java多線程有哪些狀態?
- 2、基於java 線程的幾種狀態
- 3、JAVA中,線程有哪五個基本狀態?他們之間如何讓轉化?並簡述線程周期。
- 4、Java中線程的可用狀態有哪些?
- 5、java線程中的幾種狀態以及相互轉換
- 6、JAVA中線程有哪五個基本狀態?它們之間如何讓轉化?
java多線程有哪些狀態?
初始態:一個線程調用了new方法之後,並在調用start方法之前的所處狀態。
就緒:一旦線程調用了start 方法,線程就轉到Runnable 狀態。
阻塞/ NonRunnable:線程處於阻塞/NonRunnable狀態,這是由兩種可能性造成的:要麼是因掛起而暫停的,要麼是由於某些原因而阻塞的,例如包括等待IO請求的完成。
停止/退出:線程轉到退出狀態,這有兩種可能性,要麼是run方法執行結束,要麼是調用了stop方法。
基於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 方法,該線程的生命周期結束。
JAVA中,線程有哪五個基本狀態?他們之間如何讓轉化?並簡述線程周期。
java中,每個線程都需經歷新生、就緒、運行、阻塞和死亡五種狀態,線程從新生到死亡的狀態變化稱為生命周期。
用new運算符和Thread類或其子類建立一個線程對象後,該線程就處於新生狀態。
線程的生命周期,把圖轉化為文字就是:
1、線程通過new方法創建,調用start,線程進入就緒狀態,等待系統的調度(時間片輪轉調度)。當系統調度,進入運行狀態。正常結束或者異常退出,進程進入死亡狀態。
2、處於運行狀態的線程若遇到sleep,則線程進入睡眠狀態,不會讓出資源鎖,sleep結束,線程轉為就緒狀態,等待系統重新調度。
3、處於運行狀態的線程可能在等待io,也可能進入掛起狀態。io完成,轉為就緒狀態。
4、處於運行狀態的線程yield,線程轉為就緒狀態。(yield只讓給許可權比自己高的)
5、處於運行狀態的線程遇到wait,線程處於等待狀態,需要notify()/notifyALL來喚醒線程,喚醒後的線程處於鎖定狀態,獲取了「同步鎖」,之後,線程才轉為就緒狀態。處於運行的線程synchronized,加上後 變成同步操作。處於鎖定狀態,獲取了「同步鎖」,之後,線程才轉為就緒狀態。
Java中線程的可用狀態有哪些?
Java中線程的可用狀態有下面幾種:
就緒(Runnable):線程準備運行,不一定立馬就能開始執行。
運行中(Running):進程正在執行線程的代碼。
等待中(Waiting):線程處於阻塞的狀態,等待外部的處理結束。
睡眠中(Sleeping):線程被強制睡眠。
I/O阻塞(BlockedonI/O):等待I/O操作完成。
同步阻塞(BlockedonSynchronization):等待獲取鎖。
死亡(Dead):線程完成了執行。
java線程中的幾種狀態以及相互轉換
NEW: 線程創建之後,但是還沒有啟動(not yet started)。
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: 線程中止的狀態,這個線程已經完整地執行了它的任務
JAVA中線程有哪五個基本狀態?它們之間如何讓轉化?
java中,每個線程都需經歷新生、就緒、運行、阻塞和死亡五種狀態,線程從新生到死亡的狀態變化稱為生命周期。
用new運算符和Thread類或其子類建立一個線程對象後,該線程就處於新生狀態。
新生—就緒:通過調用start()方法
就緒—運行:處於就緒狀態的線程一旦得到CPU,就進入運行狀態並自動調用自己的run()方法
運行—阻塞:處於運行狀態的線程,執行sleep()方法,或等待I/O設備資源,讓出CPU並暫時中止自己運行,進入阻塞狀態
阻塞—就緒:睡眠時間已到,或等待的I/O設備空閑下來,線程便進入就緒狀態,重新到就緒隊列中等待CPU。當再次獲得CPU時,便從原來中止位置開始繼續運行。
運行—死亡:(1)(正常情況下)線程任務完成
(2)(非正常狀況)線程被強制性的中止,如通過執行stop()或destroy()方法來終止一個線程
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/154621.html