JavaでSynchronousQueueをどう使うか。
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のインスタンスを最初に作成します。次に、製品のスレッドが作成され、要素を生産し続け、キューに配置します。消費者のスレッドが作成され、要素をキューから取り出して消費し続けます。製品者と消費者のスレッドは同時に実行されますが、製品者は要素を消費者が消費し終えるのを待たなければならず、新しい要素を生産する前に、これによりスレッド間の同期が実現されます。