在Java中,可以使用SynchronousQueue來實現線程之間的同步通信。SynchronousQueue是一個不存儲元素的阻塞隊列,它的主要特點是生產者線程必須等待消費者線程消費完元素后才能繼續生產新的元素。
以下是使用SynchronousQueue的示例代碼:
import java.util.concurrent.SynchronousQueue;
public class SynchronousQueueExample {
public static void main(String[] args) {
SynchronousQueue<Integer> queue = new SynchronousQueue<>();
// 創建生產者線程
Thread producer = new Thread(() -> {
try {
int value = 1;
while (true) {
// 將元素放入隊列
queue.put(value);
System.out.println("生產者生產了:" + value);
value++;
// 模擬生產者生產時間
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
});
// 創建消費者線程
Thread consumer = new Thread(() -> {
try {
while (true) {
// 從隊列中取出元素
int value = queue.take();
System.out.println("消費者消費了:" + value);
// 模擬消費者消費時間
Thread.sleep(2000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
});
// 啟動生產者和消費者線程
producer.start();
consumer.start();
}
}
在上述代碼中,首先創建了一個SynchronousQueue實例。然后創建了一個生產者線程,不斷地生產元素并放入隊列中。創建了一個消費者線程,不斷地從隊列中取出元素進行消費。生產者和消費者線程同時運行,但生產者必須等待消費者消費完元素后才能繼續生產新的元素,這樣就實現了線程之間的同步。