執行緒的狀態以及Callable介面的使用

2021-10-07 07:04:12 字數 2021 閱讀 8370

執行緒有新建狀態、就緒狀態,執行狀態、阻塞狀態,死亡狀態,當執行緒執行完所有的**或者interrupt中斷後,就進入死亡狀態,此時如果再呼叫start方法就會丟擲異常,其中阻塞狀態的執行緒不會釋放鎖。

public

class

teststate

catch

(interruptedexception e)

system.out.

println

(thread.

currentthread()

.getname()

+ i);}

});//檢視狀態

thread.state state = thread.

getstate()

; system.out.

println

(" - "

+ state)

; thread.

start()

;//執行緒就緒

state = thread.

getstate()

; system.out.

println

(" -- "

+ state)

;while

(state != thread.state.terminated)

//執行到這裡的時候 執行緒已經死亡,如果再start就會丟擲異常

thread.

start()

;//illegalthreadstateexception

}}

執行檢視控制台

可以看到建立但沒呼叫 start方法前為new新建狀態,如果如果呼叫了start方法則進入就緒狀態,此時會等待cpu的排程,當呼叫sleep方法時,執行緒就成為了阻塞狀態,最後進入terminated終結狀態,當執行緒進入終結狀態,如果再呼叫start就會丟擲illegalthreadstateexception異常。

建立多執行緒的方式通常有繼承thread類和實現runnable介面,除了這兩種還有實現callable介面

public

class

mycallable

implements

callable

return uuid.

randomuuid()

.tostring()

;}public

static

void

main

(string[

] args)

throws executionexception, interruptedexception

}

實現callable介面的好處有自定義執行緒的返回值型別,可丟擲異常

也可以使用集合的方法併發執行

public

class

mycallable2

implements

callable

return uuid.

randomuuid()

.tostring()

;}public

static

void

main

(string[

] args)

throws executionexception, interruptedexception

executorservice.

shutdown();}}

多執行緒Callable

runnable不支援異常處理,而callable可以異常處理 runnable不能獲取執行緒塊的返回值,而callable可以通過futruetask獲取返回值 建立2個執行緒,分別獲取userinfo資訊與stuinfo資訊 callableuserinfocallable new callab...

建立執行緒的方式Callable

一 建立執行緒的方式callable 實現callable介面相較於實現runnable介面的方式,方法可以有返回值,並且可以丟擲異常 二 執行callable方式,需要futuretask實現類的支援,用於接受運算結果。futuretask是future介面的實現類 public class te...

執行緒實現方式 Callable

除了通常使用的 extend thread 和 implement runnable 兩種方式,今天介紹下 callable 方式 先看下 runnable 介面,返回值 void。public inte ce runnable 再看下 callable 介面,返回值是乙個 v,優勢足以表明。pub...