新聞中心
線程有幾種狀態(tài)?
[1]新生狀態(tài)(New):當一個線程的實例被創(chuàng)建即使用new關鍵字和Thread類或其子類創(chuàng)建一個線程對象后,此時該線程處于新生(new)狀態(tài),處于新生狀態(tài)的線程有自己的內(nèi)存空間,但該線程并沒有運行,此時線程還不是活著的(notalive)。

[2]就緒狀態(tài)(Runnable):通過調(diào)用線程實例的start()方法來啟動線程使線程進入就緒狀態(tài)(runnable);處于就緒狀態(tài)的線程已經(jīng)具備了運行條件,但還沒有被分配到CPU即不一定會被立即執(zhí)行,此時處于線程就緒隊列,等待系統(tǒng)為其分配CPCU,等待狀態(tài)并不是執(zhí)行狀態(tài);此時線程是活著的(alive)。
[3]運行狀態(tài)(Running):一旦獲取CPU(被JVM選中),線程就進入運行(running)狀態(tài),線程的run()方法才開始被執(zhí)行;在運行狀態(tài)的線程執(zhí)行自己的run()方法中的操作,直到調(diào)用其他的方法而終止、或者等待某種資源而阻塞、或者完成任務而死亡;如果在給定的時間片內(nèi)沒有執(zhí)行結束,就會被系統(tǒng)給換下來回到線程的等待狀態(tài);此時線程是活著的(alive)。
[4]阻塞狀態(tài)(Blocked):通過調(diào)用join()、sleep()、wait()或者資源被暫用使線程處于阻塞(blocked)狀態(tài);處于Blocking狀態(tài)的線程仍然是活著的(alive)。
[5]死亡狀態(tài)(Dead):當一個線程的run()方法運行完畢或被中斷或被異常退出,該線程到達死亡(dead)狀態(tài)。此時可能仍然存在一個該Thread的實例對象,當該Thread已經(jīng)不可能在被作為一個可被獨立執(zhí)行的線程對待了,線程的獨立的callstack已經(jīng)被dissolved。一旦某一線程進入Dead狀態(tài),他就再也不能進入一個獨立線程的生命周期了。對于一個處于Dead狀態(tài)的線程調(diào)用start()方法,會出現(xiàn)一個運行期(runtimeexception)的異常;處于Dead狀態(tài)的線程不是活著的(notalive)。
線程的五種狀態(tài)?
Java中的線程可以存在以下五種狀態(tài):
1. 新建狀態(tài)(New):當一個線程被創(chuàng)建時,它處于新建狀態(tài)。此時它還沒有開始執(zhí)行,不能被系統(tǒng)調(diào)度。
2. 就緒狀態(tài)(Runnable):當線程被start()方法啟動后,它進入就緒狀態(tài)。此時它已經(jīng)準備好了,只等待系統(tǒng)調(diào)度它的CPU資源,開始運行。
3. 運行狀態(tài)(Running):當線程得到CPU資源后,它進入運行狀態(tài)。此時它正在處理任務。
4. 阻塞狀態(tài)(Blocked):當線程無法獲取到所需的資源(如鎖)時,它會進入阻塞狀態(tài)。在此狀態(tài)下,線程不能繼續(xù)執(zhí)行,只能等待獲得所需的資源后再次進入就緒狀態(tài)。
c#使用多線程的幾種方式示例詳解?
多線程使用的主要的幾種形式:
1)使用Thread類創(chuàng)建一個新線程
static void Main(string[] args){ Thread thread = new Thread(delegate(){ for (int i = 0; i <= 10; i++){ Console.WriteLine(Thread.CurrentThread.Name + ":" + i); Thread.Sleep(100); } }); thread.Name = "t1 thread"; thread.Start(); Console.WriteLine("TO DO SOMETHING..."); Console.ReadKey(true);}
2)使用async與await關鍵字配合使用
static void Main(string[] args){ Console.WriteLine("Main method start..."); Foo(); Console.WriteLine("TO DO SOMETHING..."); Console.WriteLine("Main method end..."); Console.ReadKey(true);} async static void Foo(){ Console.WriteLine("Foo method start."); await Task.Delay(2000); Console.WriteLine("Foo method end.");}
3)使用委托內(nèi)置的實例方法BeginInvoke實現(xiàn)異步編程
到此,以上就是小編對于java線程生命周期的狀態(tài)有哪幾種類型的問題就介紹到這了,希望這3點解答對大家有用。
當前標題:java線程生命周期的狀態(tài)有哪幾種
分享路徑:http://fisionsoft.com.cn/article/djsjjsg.html


咨詢
建站咨詢
