SynchronousQueue 实例
时间: 2024-01-13 07:04:52 浏览: 63
以下是 SynchronousQueue 的一个简单示例:
```java
import java.util.concurrent.SynchronousQueue;
public class SynchronousQueueExample {
public static void main(String[] args) throws InterruptedException {
SynchronousQueue<Integer> queue = new SynchronousQueue<>();
// 启动生产者线程
new Thread(() -> {
int i = 0;
while (true) {
try {
// 将元素放入队列
queue.put(++i);
System.out.println("生产者生产:" + i);
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
// 启动消费者线程
new Thread(() -> {
while (true) {
try {
// 从队列中取出元素,如果队列为空则阻塞
int num = queue.take();
System.out.println("消费者消费:" + num);
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
}
```
在上面的示例中,我们创建了一个 SynchronousQueue 对象,并启动了一个生产者线程和一个消费者线程。生产者线程不断地向队列中添加元素,每次添加后暂停 1 秒钟。消费者线程不断地从队列中取出元素,每次取出后暂停 2 秒钟。由于 SynchronousQueue 是一种特殊的队列,它只能存放一个元素,因此生产者线程在向队列添加元素时会被阻塞,直到消费者线程从队列中取出元素为止。同样地,消费者线程在从队列中取出元素时也会被阻塞,直到生产者线程添加元素为止。这样就实现了生产者和消费者之间的同步。
阅读全文