【BlockingQueue】1.drainTo实现将当前阻塞队列中的信息全部转移到List中 2.poll实现队列中没有值也不阻塞

 用法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 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 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直接阻塞那

你可能感兴趣的:(#,java多线程,java)