线程池 SynchronousQueue
时间: 2023-11-17 11:02:28 浏览: 90
线程池及其同步
4星 · 用户满意度95%
SynchronousQueue是一个没有数据缓冲的BlockingQueue,生产者线程对其的插入操作put必须等待消费者的移除操作take,反之亦然。SynchronousQueue非常适合于传递性场景,即一个线程生产的东西必须直接被另一个线程消费,没有中间过程。在线程池中,SynchronousQueue作为工作队列,可以将任务直接提交给线程池中的工作线程,而不需要将任务缓存到队列中等待工作线程的处理。这样可以避免任务在队列中等待的时间,从而减少了整个任务的响应时间。
下面是一个使用SynchronousQueue的小Demo:
```
public class TestSynchronousQueue {
public static void main(String[] args) throws Exception {
//使用非公平策略
// SynchronousQueue synchronousQueue= new SynchronousQueue();
//使用公平策略
SynchronousQueue synchronousQueue= new SynchronousQueue(true);
new Thread(() -> {
try {
synchronousQueue.put("A");
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
//休眠一下,让异步线程完成
Thread.sleep(1000);
new Thread(() -> {
try {
synchronousQueue.put("B");
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}).start();
//休眠一下,让异步线程完成
Thread.sleep(1000);
new Thread(() -> {
try {
Object take = synchronousQueue.take();
System.out.println(take);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}).start();
//休眠一下,让异步线程完成
Thread.sleep(1000);
//不管如何输出,都是 0
System.out.println(synchronousQueue.size());
}
}
```
阅读全文