執行緒間的通訊

2021-09-28 18:10:59 字數 4845 閱讀 1973

常用的 wait()、notify()、notifyall();在乙個執行緒裡面,喚醒其他擁有同樣的鎖的執行緒

/**

* 使用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()

;}}

piped管道,通過管道位元組流,實現執行緒間的資料交換

/**

* @author : fzz

*/public

class

pipedreader

implements

runnable

@override

public

void

run(

)catch

(ioexception e)}}

}/**

* @author : fzz

*/public

class

pipeddemo

finally

}}

thread.join()方法;在a執行緒內呼叫啟動b執行緒,等待b執行緒執行完成,a執行緒再繼續執行

/**

* @author : fzz

*/public

class

communicatedemo

,"執行緒1");

newthread((

)->

catch

(interruptedexception e)

system.out.

println

(thread.

currentthread()

.getname()

+"呼叫執行緒1 完成!");

},"執行緒2").

start()

;}}

通過threadlocal實現,當前執行緒擁有自己的例項,互不干擾;threadlocal 底層用乙個map結構

key:當前執行緒 value:當前執行緒存放的值

/**

* @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

,condition實現(相比 wait,notify() 可以有多的等待,喚醒,通過newcondition,指定性強)

/**

* @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()

;}}

countdownlatch:通過countdown計數減一,呼叫 await() 等待所有執行緒執行完成再繼續

/**

* @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

cyclicbarrier:多個執行緒等到同一狀態,一起執行

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開始!

semaphore訊號量:起到乙個限流的作用,只允許幾個執行緒執行

public

class

semaphoredemo

catch

(exception e)

finally})

.start()

;}}}

exchanger(成對使用):用於交換資料,當兩個執行緒都達到exchanger時候,交換資料;否則一直等待

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 ...