当先锋百科网

首页 1 2 3 4 5 6 7

 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;
            }
        }