在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实例。然后创建了一个生产者线程,不断地生产元素并放入队列中。创建了一个消费者线程,不断地从队列中取出元素进行消费。生产者和消费者线程同时运行,但生产者必须等待消费者消费完元素后才能继续生产新的元素,这样就实现了线程之间的同步。