Java執行緒間通訊方式的總結

2021-08-27 10:56:37 字數 1126 閱讀 7738

1、thread.join()方法

假設有a、b兩個執行緒,在b執行緒的run()方法中呼叫a.join()方法會讓 b一直等待直到 a 執行完畢才繼續執行。

2、object.wait()和object.notify()

定義全域性鎖object lock = new object();

假設有a、b兩個執行緒,在a執行緒中執行完想要其執行的部分後呼叫lock.wait()。

b執行緒在執行完想要其執行的部分後呼叫lock.notify(),交出鎖的控制權。

當然,a執行緒和b執行緒的run()方法內容是在synchronized(lock)下的。

3、countdownlatch

應用場景:多個執行緒同時執行完成後目標執行緒t開始執行,即乙個執行緒等待多個執行緒的場景

首先建立乙個計數器,countdownlatch countdownlatch = new countdownlatch(3);

表示有3個執行緒需要同步執行

在目標執行緒裡呼叫countdownlatch.await() 方法,進入等待狀態,直到計數值變成 0;

在同步執行的執行緒中,結束前呼叫countdownlatch.countdown()方法,該方法會將計數值減小1;

當計數值變成 0 時,目標執行緒裡的countdownlatch.await() 立即退出,繼續執行其**。

4、cyclicbarrier

應用場景:實現執行緒間互相等待再一起執行

首先建立乙個cyclicbarrier物件

cyclicbarrier cyclicbarrier = new cyclicbarrier(3);

表示有3個執行緒需要同步執行

當各個執行緒準備好執行時,呼叫cyclicbarrier.await()函式,當3個執行緒都呼叫了這個函式後,3個執行緒開始同步執行。

5、futuretask和callable

應用場景:需要子執行緒傳回執行結果

new callable物件在call()方法中實現子執行緒的邏輯

用callable物件座位引數new futuretask

用futuretask作為物件new thread呼叫start()方法

利用futuretask物件的get()方法獲取計算結果,注意get()方法會阻塞主線程。

程序間 執行緒間通訊方式總結

管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。有名管道 namedpipe 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。訊號量 semophore 訊號量是乙個計數器,可以用來控制多個程序對共...

程序間 執行緒間通訊方式總結

管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。有名管道 namedpipe 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。訊號量 semophore 訊號量是乙個計數器,可以用來控制多個程序對共...

java 執行緒間通訊的幾種方式

1.如何讓兩個執行緒依次執行 假設有兩個執行緒,乙個執行緒a,乙個執行緒b,兩個執行緒分別依次列印 1 3 三個數字即可。package test author administrator createdate 2017 10 10 public class demo1 thread thread2...