執行緒的生命週期
初始/新建狀態:
使用 new 關鍵字和 thread 類或其子類建立乙個執行緒物件後,該執行緒物件就處於初始/新建狀態。它保持這個狀態直到程式 start() 這個執行緒。
就緒狀態:
當執行緒物件呼叫了start()方法之後,該執行緒就進入就緒狀態。就緒狀態的執行緒處於就緒佇列中,要等待jvm裡執行緒排程器的排程。
執行狀態:
如果就緒狀態的執行緒獲取 cpu 資源,就可以執行 run(),此時執行緒便處於執行狀態。處於執行狀態的執行緒最為複雜,它可以變為阻塞狀態、就緒狀態和終止狀態。
阻塞狀態:
如果乙個執行緒執行了sleep(睡眠)、suspend(掛起)等方法,失去所占用資源之後,該執行緒就從執行狀態進入阻塞狀態。在睡眠時間已到或獲得裝置資源後可以重新進入就緒狀態。可以分為三種:
終止狀態:
乙個執行狀態的執行緒完成任務或者其他終止條件發生時,該執行緒就切換到終止狀態。
常見方法屬性
啟動乙個執行緒-start()
public
class
test})
; thread.
start();}}
建立了乙個執行緒並且重寫了run()
並不意味著它就開始執行了。實際是:我建立了乙個執行緒,並且告訴它需要做什麼(run()
),但是它自己不能自動開始,而是需要呼叫start()
,告訴它,可以開始工作了,這時候執行緒才可以開始執行
一定要注意 run 方法和 start 方法是不同的,啟動執行緒必須要呼叫 start 方法。執行緒讓步 - yield()
當前執行緒讓出cpu ,其他執行緒先執行,自己轉為就緒態。
package yieldtest;
public
class
yieldtest})
.start()
;//主線程讓步
while
( thread.
activecount()
>1)
system.out.
println
(thread.
currentthread()
.getname()
);}}
主線程沒有讓步結果:
main
thread-
0
主線程讓步結果:
thread-
0main
因為建立乙個執行緒的時間比主線程執行的時間長,如果主線程沒有讓步,則先執行到主線程的列印函式。如果主線程呼叫yield()
讓步,則先把建立的執行緒執行結束,自己再繼續執行
執行緒等待 - join
package jointest;
public
class
jointest
catch
(interruptedexception e)
system.out.
println
(thread.
currentthread()
.getname()
);}}
);t.
start()
;system.out.
println
(thread.
currentthread()
.getname()
);}}
t.join():
無參構造表示引用join()
的執行緒 a(在**呼叫誰就是a),等待被引用執行緒 b (此處為t)執行結束再執行
thread-
0main
join(time):
帶參構造表示引用join(time)
的執行緒a,在滿足以下條件之一後開始執行。
main
thread-
0
中斷執行緒
通過 thread 物件呼叫 interrupt() 方法通知該執行緒停止執行,具體停止與否,由執行緒決定。
thread 收到通知的方式有兩種:
**a:
public
class
test
catch
(interruptedexception e)
for(
int i =
0; i <
5; i++)}
}); thread.
start()
; thread.
interrupt();}}
通過異常收到了中斷情況 // 通過異常收到中斷通知,並且標誌位被清
false
false
false
false
**b:
public
class
test}}
);thread.
start()
; thread.
interrupt();}}
true
// 只有一開始是 true,後邊都是 false,因為標誌位被清
false
false
false
false
**c:
public
class
test}}
);thread.
start()
; thread.
interrupt();}}
true
// 全部是 true,因為標誌位沒有被清
true
true
true
true
常用方法,不具體解釋
返回當前執行緒物件的引用
public
static thread currentthread()
;
休眠當前執行緒 millis 毫秒
public
static
void
sleep
(long millis)
throws interruptedexception
java多執行緒 基礎概念
join 方法 在很多情況下,主線程生成並起動了子執行緒,如果子執行緒裡要進行大量的耗時的運算,主線程往往將於子執行緒之前結束,但是如果主線程處理完其他的事務後,需要用到子執行緒的處理結果,也就是主線程需要等待子執行緒執行完成之後再結束,這個時候就要用到join 方法了。wait方法 呼叫obj的w...
Linux多執行緒實踐 2 執行緒基本API
與執行緒有關的函式構成了乙個完整的系列,絕大多數函式的名字都是以 pthread 開頭,要使用這些函式庫,要通過引入頭文,而且鏈結這些執行緒函式庫時要使用編譯器命令的 lpthread 選項 ubuntu系列系統需要新增的是 pthread 選項而不是 lpthread 如ubuntu 14.04版...
常用多執行緒方法
reentrantlock類 synchronized關鍵字,屬於悲觀鎖。可重入鎖,即遞迴鎖。指在同一執行緒內,外層函式獲得鎖之後,內層遞迴函式仍然可以獲得該鎖。作用 防止在同一執行緒中多次獲取鎖而導致死鎖發生。j a.util.concurrent.atomic包下的atomicreference...