常用的 wait()、notify()、notifyall();在乙個執行緒裡面,喚醒其他擁有同樣的鎖的執行緒
piped管道,通過管道位元組流,實現執行緒間的資料交換/**
* 使用wait(),notify(),notifyall()時,**塊必須上鎖
* @author : fzz
*/public
class
communicate
catch
(interruptedexception e)
system.out.
println
(thread.
currentthread()
.getname()
+": "
+ str);}
}).start()
;new
thread((
)->
catch
(exception e)}}
).start()
;}}
thread.join()方法;在a執行緒內呼叫啟動b執行緒,等待b執行緒執行完成,a執行緒再繼續執行/**
* @author : fzz
*/public
class
pipedreader
implements
runnable
@override
public
void
run(
)catch
(ioexception e)}}
}/**
* @author : fzz
*/public
class
pipeddemo
finally
}}
通過threadlocal實現,當前執行緒擁有自己的例項,互不干擾;threadlocal 底層用乙個map結構/**
* @author : fzz
*/public
class
communicatedemo
,"執行緒1");
newthread((
)->
catch
(interruptedexception e)
system.out.
println
(thread.
currentthread()
.getname()
+"呼叫執行緒1 完成!");
},"執行緒2").
start()
;}}
key:當前執行緒 value:當前執行緒存放的值
,condition實現(相比 wait,notify() 可以有多的等待,喚醒,通過newcondition,指定性強)/**
* @author : fzz
*/public
class
threadlocaldemo
public
static
void
main
(string[
] args)
catch
(interruptedexception e)}}
).start()
;}}}
列印結果:
thread-0==
==》1
thread-1==
==》1
thread-2==
==》1
thread-0==
==》2
thread-2==
==》2
thread-1==
==》2
thread-1==
==》3
thread-0==
==》3
thread-2==
==》3
thread-2==
==》4
thread-1==
==》4
thread-0==
==》4
countdownlatch:通過countdown計數減一,呼叫 await() 等待所有執行緒執行完成再繼續/**
* @author : fzz
*/public
class
confitiondemo
catch
(interruptedexception e)
system.out.
println
(thread.
currentthread()
.getname()
+": "
+ str)
; lock.
unlock()
;}).
start()
;new
thread((
)->
catch
(exception e)
lock.
unlock()
;}).
start()
;}}
cyclicbarrier:多個執行緒等到同一狀態,一起執行/**
* @author : fzz
*/public
class
countdownlatchdemo).
start()
;}countdownlatch.
await()
; system.out.
println
("執行結束!");
}}// 用countdownlatch: 沒用countdownlatch:
// thread-0:0 thread-0:0
// thread-7:7 thread-7:7
// thread-8:8 thread-8:8
// thread-6:6 thread-6:6
// thread-5:5 執行結束!
// thread-4:4 thread-4:4
// thread-3:3 thread-3:3
// thread-1:1 thread-1:1
// thread-2:2 thread-2:2
// thread-9:9 thread-9:9
// 執行結束! thread-5:5
semaphore訊號量:起到乙個限流的作用,只允許幾個執行緒執行public
class
cyclicbarrierdemo
catch
(exception e)
system.out.
println
(thread.
currentthread()
.getname()
+"開始!");
}).start()
;}}}
// thread-0準備就緒!
// thread-1準備就緒!
// thread-2準備就緒!
// thread-3準備就緒!
// thread-4準備就緒!
// thread-4開始!
// thread-0開始!
// thread-1開始!
// thread-2開始!
// thread-3開始!
exchanger(成對使用):用於交換資料,當兩個執行緒都達到exchanger時候,交換資料;否則一直等待public
class
semaphoredemo
catch
(exception e)
finally})
.start()
;}}}
public
class
exchangerdemo
catch
(interruptedexception e)},
"執行緒一").
start()
;new
thread((
)->
catch
(interruptedexception e)},
"執行緒二").
start()
;}}執行緒一初始化值==
=>hello
執行緒二初始化值==
=>world
執行緒二交換後值==
=>hello
執行緒一交換後值==
=>world
執行緒間的通訊
執行緒間的通訊 簡單說明 執行緒間通訊 在1個程序中,執行緒往往不是孤立存在的,多個執行緒之間需要經常進行通訊 執行緒間通訊的體現 1個執行緒傳遞資料給另1個執行緒 在1個執行緒中執行完特定任務後,轉到另1個執行緒繼續執行任務 執行緒間通訊常用方法 06 nsthread04 執行緒間通訊 impo...
執行緒間的通訊
1.執行緒間的通訊 多個執行緒處理同乙個資源,但處理的動作卻不同 2.執行緒間的有效通訊 使用等待喚醒機制,實現協調通訊,讓執行緒間進行有規律的執行 3.條件 3.1 wait方法與notify方法必須由同乙個鎖物件呼叫,因為,對應的鎖物件可以通過notify喚醒使用同乙個物件呼叫的wait方法後的...
執行緒間的通訊
public class demo1 catch interruptedexception e system.out.println flag is true start new thread catch interruptedexception e system.out.println flag ...