java 线程篇之 Queue、BlockingQueue、BlockingDeque、ArrayBlockingQueue、LinkedBlockingQueue、DelayQueue...

本文详细介绍了Java中的队列实现,包括非阻塞队列Queue的基本操作如offer、remove及element等,并深入探讨了阻塞队列BlockingQueue的操作如put、take等。此外,还讨论了ArrayBlockingQueue和LinkedBlockingQueue的区别,以及如何使用DelayQueue实现延迟消费。

1、什么要将java的队列,因为java线程的实现其实就是依靠队列来实现的

2、Queue

Queue 提供了

offer(E e) // 插入元素到队列,如果容量不足,抛出异常

remove() //异常头元素,如果为空,抛出一次  相对的是poll() 如果为空,返回null

element() //查看头元素,不是异常,如果为空,抛出一次,相对的peek() 如果为空返回null;

3、BlockingQueue

put(E e) //玩队列添加一个元素,如果容量不知,阻塞等待,直到有剩余空间为止

take() //移除头,如果为空,阻塞,直到队列有新的元素进来

remainingCapacity() //剩余的空间

drainTo(Collection<? super E> c); //移除所有队列元素,添加到集合中(向上转型),比如

private static BlockingQueue<String> queue = new ArrayBlockingQueue(1000);

public static void main(String[] args) throws InterruptedException {
    queue.put("hello");
    List<String> list = new ArrayList<>();
    queue.drainTo(list);
    System.out.println(list.get(0));
}

4、BlockingDeque

putFirst(E e),putLast(E e) //放入到头和尾

takeFirst(),taskLast()  //头和尾取元素

 5、ArrayBlockingQueue  和  LinkedBlockingQueue

ArrayBlockingQueue 这种队列提供先进先出的队列,每次插入的元素必须在尾部。

LinkedBlockingQueue 是一种链表型的队列(意思是没放入一个元素到队列之前,必须创建一个Node节点)

6、DelayQueue

延迟队列,是做为一种延迟消费任务的队列形式,比如前面说的ScheduledThreadPoolExecutor 就是一种延迟消费的线程池的实现

public class BlockQunue implements Delayed{

    private static DelayQueue<BlockQunue> delayQueue = new DelayQueue();
    private String delay;
    private long time ;

    public BlockQunue(String delay, long time) {
        this.delay = delay;
        this.time = time+System.currentTimeMillis();
    }

    public String getDelay() {
        return delay;
    }

    @Override
    public long getDelay(TimeUnit unit) {
        return time-System.currentTimeMillis();
    }

    @Override
    public int compareTo(Delayed o) {
        return 0;
    }

    
    public static void main(String[] args) throws InterruptedException {
        BlockQunue qunue = new BlockQunue("hello",2000L);   //2s延迟
        delayQueue.offer(qunue);  

        System.out.println(delayQueue.take().getDelay());
    }
   
}

 

转载于:https://my.oschina.net/chenping12/blog/1517705

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值