LinkedBlockingQueue
是一个阻塞队列,采用双锁技术,性能较 ArrayBlockingQueue
有很大的提高。
源码层面,有很多地方与ArrayBlockingQueue原理类似。前面写过一篇ArrayBlockingQueue源码解析, 看这篇文章之前,可以先看下。
LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<Integer>();
Thread t0 = new Thread(new Runnable() {
@SneakyThrows
@Override
public void run() {
for (int i = 0; i < 10; i++) {
boolean offer = queue.offer(i);
log.info("offer:{}, value:{}", offer, i);
Thread.sleep(300);
}
}
}, "t0");
Thread t1 = new Thread(new Runnable() {
@SneakyThrows
@Override
public void run() {
for (int i = 0; i < 10; i++) {
Integer take = queue.take();
log.info("take:{}", take);
}
}
}, "t1");
t1.start();
t0.start