组赛队列,BlockingQueue 如果有数据,只能等数据消费以后再生产。否则阻塞。
SynchronousQueueDemo.java
public static void main(String[] args) {
BlockingQueue blockingQueue = new SynchronousQueue();
new Thread(() -> {
try {
System.out.println(Thread.currentThread().getName() + " put 1");
blockingQueue.put("1");
System.out.println(Thread.currentThread().getName() + " put 2");
blockingQueue.put("2");
System.out.println(Thread.currentThread().getName() + " put 3");
blockingQueue.put("3");
} catch (InterruptedException e) {
e.printStackTrace();
}
}, "aaa").start();
new Thread(() -> {
try {
TimeUnit.SECONDS.sleep(3);
System.out.println(Thread.currentThread().getName() + " " +blockingQueue.take());
TimeUnit.SECONDS.sleep(3);
System.out.println(Thread.currentThread().getName() + " " +blockingQueue.take());
TimeUnit.SECONDS.sleep(3);
System.out.println(Thread.currentThread().getName() + " " +blockingQueue.take());
} catch (InterruptedException e) {
e.printStackTrace();
}
}, "bbb").start();
}
结果:
aaa put 1
bbb 1
aaa put 2
bbb 2
aaa put 3
bbb 3
备注:来自周老师。
博客介绍了 BlockingQueue 的数据生产消费规则,即若队列中有数据,需等数据消费后才能再生产,否则会阻塞,还提及了 SynchronousQueueDemo.java 及备注来自周老师。

288

被折叠的 条评论
为什么被折叠?



