blockingqueue是什么?是什么意思?

KLQ 2020-06-24 15:08:03 java常见问答 3250

你对于java blockingqueue了解吗?下面要给大家讲到的就是和blockingqueue相关的内容,一起来通过下面的文章进行一下了解吧。

1、什么是blockingqueue?

java.util.concurrent.BlockingQueue接口很好的解决了多线程当中,怎样高效安全的传输数据的问题,通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。

阻塞队列

它是一个队列,在多线程的领域当中,阻塞就是在某些情况之下,会挂起线程就被称作是阻塞,等到条件满足的时候,被挂起的线程又会被自动被唤醒。

2、blockingqueue常见阻塞场景介绍

(1)一个是在队列当中,没有数据的时候,消费者端的所有线程都会被自动阻塞,一直到有数据放入队列;

(2)另一个是在队列当中,填满了数据的时候,生产者端的所有线程都会被自动阻塞,一直到队列当中,有空的位置,线程被自动唤醒;

3、blockingqueue核心方法介绍

(1)put(anObject)-把anObject加到BlockingQueue里,如果BlockQueue没有空间,则调用此方法的线程被阻断直到BlockingQueue里面有空间再继续;

(2)drainTo()-一次性从BlockingQueue获取所有可用的数据对象(还可以指定获取数据的个数,通过该方法,可以提升获取数据效率;不需要多次分批加锁或释放锁;

(3)offer(anObject)-如果可能的话,将anObject加到BlockingQueue里,即如果BlockingQueue可以容纳,则返回true,否则返回false.(本方法不阻塞当前执行方法的线程);

(4)poll(time)-取走BlockingQueue里排在首位的对象,若不能立即取出,则可以等time参数规定的时间,取不到时返回null;

(5)poll(long timeout, TimeUnit unit)-从BlockingQueue取出一个队首的对象,如果在指定时间内,队列一旦有数据可取,则立即返回队列中的数据。否则知道时间超时还没有数据可取,返回失败;

(6)offer(E o, long timeout, TimeUnit unit)-可以设定等待的时间,如果在指定的时间内,还不能往队列中加入BlockingQueue,则返回失败;

(7)take()-取走BlockingQueue里排在首位的对象,若BlockingQueue为空,阻断进入等待状态直到BlockingQueue有新的数据被加入;

对于blockingqueue你都了解了吗?你还有什么问题吗?更多blockingqueue常见问题,请继续来本站进行了解和学习吧!希望上面的内容可以对你有所帮助。

推荐阅读:

java并发包有什么类?一般作用是什么?

多线程并发保护机制有哪些?java多线程详解

高并发开发原理是什么?如何理解?