執行緒有新建狀態、就緒狀態,執行狀態、阻塞狀態,死亡狀態,當執行緒執行完所有的**或者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...