用法1:drainTo实现将当前阻塞队列中的信息全部转移到List中
package org.example.testDrainTo;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
public class Main {
public static void main(String[] args) {
BlockingQueue<Integer> blockingQueue = new LinkedBlockingQueue<>(50000);
blockingQueue.offer(1);
blockingQueue.offer(2);
blockingQueue.offer(3);
blockingQueue.offer(4);
blockingQueue.offer(5);
System.out.println(blockingQueue.size());
List<Integer> list = new ArrayList<>();
// 转移阻塞队列数据到普通的List
blockingQueue.drainTo(list);
System.out.println(blockingQueue.size());
System.out.println(list.size());
}
}
/*
5
0
5
*/
用法2:用于线程间通信,a线程给提交任务给b线程,b采用poll主动拉去的方式,如果没有值也不会阻塞,而不是使用take直接阻塞那