你对于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常见问题,请继续来本站进行了解和学习吧!希望上面的内容可以对你有所帮助。
推荐阅读: