take 会一直阻塞队列,用poll代替take。
poll(long timeout, TimeUnit unit)
检索并删除此队列的头,等待指定的等待时间(如有必要)使元素变为可用。
static volatile BlockingQueue<Integer> blockingQueue = new ArrayBlockingQueue<>(1024 * 1024);
public static void main(String[] args) throws InterruptedException {
for (int i = 1; i < 11; i++) {
blockingQueue.add(i);
}
while (true){
//阻塞队列5秒没有数据,就会返回null
Integer poll = blockingQueue.poll(5000, TimeUnit.MILLISECONDS);
System.out.println("poll = " + poll);
//阻塞队列为空,就停止
if (null == poll){
break;
}
}