本文目錄一覽:
- 1、線程有幾種狀態?
- 2、JAVA中,線程有哪五個基本狀態?他們之間如何讓轉化?並簡述線程周期。
- 3、Java中,線程是什麼意思,多線程又是什麼
- 4、Java中線程的可用狀態有哪些?
- 5、java多線程有哪些狀態?
- 6、基於java 線程的幾種狀態
線程有幾種狀態?
Java中的線程的生命周期大體可分為5種狀態。
1、新建(NEW):新創建了一個線程對象。
2、可運行(RUNNABLE):線程對象創建後,其他線程(比如main線程)調用了該對象的start()方法。該狀態的線程位於可運行線程池中,等待被線程調度選中,獲取cpu的使用權。
3、運行(RUNNING):可運行狀態(runnable)的線程獲得了cpu時間片(timeslice),執行程序代碼。
4、阻塞(BLOCKED):阻塞狀態是指線程因為某種原因放棄了cpu使用權,也即讓出了cpu timeslice,暫時停止運行。直到線程進入可運行(runnable)狀態,才有機會再次獲得cpu timeslice轉到運行(running)狀態。
阻塞的情況分三種:
(一).等待阻塞:運行(running)的線程執行o.wait()方法,JVM會把該線程放入等待隊列(waitting queue)中。
(二).同步阻塞:運行(running)的線程在獲取對象的同步鎖時,若該同步鎖被別的線程佔用,則JVM會把該線程放入鎖池(lock pool)中。
(三).其他阻塞:運行(running)的線程執行Thread.sleep(long ms)或t.join()方法,或者發出了I/O請求時,JVM會把該線程置為阻塞狀態。當sleep()狀態超時、join()等待線程終止或者超時、或者I/O處理完畢時,線程重新轉入可運行(runnable)狀態。
5、死亡(DEAD):線程run()、main()方法執行結束,或者因異常退出了run()方法,則該線程結束生命周期。死亡的線程不可再次復生。
JAVA中,線程有哪五個基本狀態?他們之間如何讓轉化?並簡述線程周期。
java中,每個線程都需經歷新生、就緒、運行、阻塞和死亡五種狀態,線程從新生到死亡的狀態變化稱為生命周期。
用new運算符和Thread類或其子類建立一個線程對象後,該線程就處於新生狀態。
線程的生命周期,把圖轉化為文字就是:
1、線程通過new方法創建,調用start,線程進入就緒狀態,等待系統的調度(時間片輪轉調度)。當系統調度,進入運行狀態。正常結束或者異常退出,進程進入死亡狀態。
2、處於運行狀態的線程若遇到sleep,則線程進入睡眠狀態,不會讓出資源鎖,sleep結束,線程轉為就緒狀態,等待系統重新調度。
3、處於運行狀態的線程可能在等待io,也可能進入掛起狀態。io完成,轉為就緒狀態。
4、處於運行狀態的線程yield,線程轉為就緒狀態。(yield只讓給權限比自己高的)
5、處於運行狀態的線程遇到wait,線程處於等待狀態,需要notify()/notifyALL來喚醒線程,喚醒後的線程處於鎖定狀態,獲取了“同步鎖”,之後,線程才轉為就緒狀態。處於運行的線程synchronized,加上後 變成同步操作。處於鎖定狀態,獲取了“同步鎖”,之後,線程才轉為就緒狀態。
Java中,線程是什麼意思,多線程又是什麼
在計算機中當一個程序運行的時候就會創建至少一個進程,例如當我們運行QQ的時候,系統就會創建進程來處理我們平時的一些操作,當我們打開任務管理器的時候,在進程的列表裡面就可以找到QQ.exe的運行程序;
在計算機中處理進程之外還有另一個概念就是線程,線程是存在於進程當中,一個進程可以包含多個線程;當我們的計算機有多核處理器的時候,使用多線程可以加快程序的運算速率;如果一個進程中只有一個線程,當程序遇到一個比較耗時的計算的時候,由於程序是單線程的,那麼程序只能等待這個運算結束的時候再繼續運行,這樣會大大的降低程序的效率;當時用多個線程的時候,在某個線程遇到比較耗時的運算的時候,該線程可以繼續自己的運算,但是其他的線程也可以同步進行,這樣當耗時的計算結束之後,其他線程也將自己所需要的東西執行完畢,這樣就會很大的提高程序執行效率;
在程序運行中對於文件的保存相對於處理器的運算速度來說是很慢的,當我們程序中接收到一個保存文件的信息之後,我們可以創建一個保存文件的線程,在主線程中我們可以繼續進行我們的其他運算,這樣當文件保存好之後,我們的其他運算也會完成,互不影響;
在Java中我們可以創建一個自己的類繼承於Thread類,並且重寫run() 方法,當線程啟動之後,run()方法裡面的操作都在線程中進行處理,而不會影響主線程的信息;
當我們創建好一個自定義線程類之後,我們可以創建這個自定義線程的對象,進行線程的啟動;線程須調用start();方法進行啟動,這樣run()方法裡面的內容才會在線程中運行;如果我們不去調用start()方法,那我們只是創建了一個普通的類,即使我們手動調用run()方法,run()方法裡面的內容也不會在線程中運行;
在Java中線程主要有初始狀態,運行狀態,阻塞狀態,終止狀態等;當我們新創建一個線程對象的時候,此時線程的狀態為初始狀態;當我們調用start()之後,此時的線程才被激活成為運行狀態,之後run()方法裡面的信息才會在子線程中運行;我們可以在不同的階段調用不同的方法將線程設置為不同的狀態;比如有時候我們的操作需要等待其他線程中運算結束之後才可以繼續進行,這時候我們就可以將線程設置為等待狀態,當需要的資源滿足條件之後,可以繼續運行當前的線程;
以上的內容就是關於Java中線程是什麼,更多關於Java方面的問題可以看下這個視頻教程:網頁鏈接,希望我的回答能幫到你。
Java中線程的可用狀態有哪些?
Java中線程的可用狀態有下面幾種:
就緒(Runnable):線程準備運行,不一定立馬就能開始執行。
運行中(Running):進程正在執行線程的代碼。
等待中(Waiting):線程處於阻塞的狀態,等待外部的處理結束。
睡眠中(Sleeping):線程被強制睡眠。
I/O阻塞(BlockedonI/O):等待I/O操作完成。
同步阻塞(BlockedonSynchronization):等待獲取鎖。
死亡(Dead):線程完成了執行。
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 方法,該線程的生命周期結束。
原創文章,作者:LDFF,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/136777.html