BlockingQueue家族成员一览

      最近在复习多线程的知识,必然少不了要扫描一遍JUC包下的各个类或接口,今天就先来聊一聊阻塞队列BlockingQueue;

      BlockingQueue是jdk1.5发布的JUC包下的一个工具类,他提供了天生阻塞的拿(put)和取(take)元素的方法,线程安全,通过其阻塞的put、take方法能很好的实现生产者消费者模型,解决线程间的通信问题,

      下面先分别介绍其本身拥有的一些特性方法和实现类

      特性方法:

      boolean add(E e);        添加元素,成功返回true,失败返回false,如果队列设置了长度,超长会抛java.lang.IllegalStateException: Queue full异常

      void put(E e);               阻塞式的添加元素,如果队列超长当前线程会一直阻塞,直到队列里的元素被take可以成功添加为止

      boolean offer(E e);       添加元素,成功返回true,失败返回false,与add的区别在于队列满了添加失败不会抛异常而是返回false

      E take();                        阻塞式的获取队列元素,只要take不到元素当前线程会一直阻塞,直到队列里有元素并成功获取

      E poll();                        从队列头部获取并移除元素,获取不到返回null

      E peek();                      从队列头部获取元素但不移除元素,获取不到返回null

     int drainTo(Collection<? super E> c);   将队列中的元素全部移除,并发送到给定的集合中,返回的是操作成功的元素个数

     关于实现类我也不想利用文本的方式一个个列起来了,下面直接附上我整理的思维导图的部分截图,简单明了:

            需要注意的是,BlockingQueue的一众实现类是线程池接收任务队列的多种实现,不同的队列应用于不同场景下的线程池;后面会抽时间写一篇关于线程池的总结笔记

 

         

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章