Java中的BlockingQueue接口源码解析

 更新时间:2023年11月01日 10:44:07   作者:兴趣使然的程序猿  
这篇文章主要介绍了Java中的BlockingQueue接口源码解析,BlockingQueue接口表示阻塞队列,是Java并发包中阻塞队列的接口定义规范,阻塞队列意味着对于该队列的操作是线程安全的,当多个线程存放元素进入队列或者从队列中取出元素都是线程安全的,需要的朋友可以参考下

BlockingQueue

BlockingQueue接口表示阻塞队列,是Java并发包中阻塞队列的接口定义规范,阻塞队列意味着对于该队列的操作是线程安全的,当多个线程存放元素进入队列或者从队列中取出元素都是线程安全的。阻塞队列的操作和普通队列没有区别,主要是加了线程安全控制,其工作原理如下图。

在这里插入图片描述

1 BlockingQueue接口继承关系

BlockingQueue是继承自java集合框架中的Queue接口。

在这里插入图片描述

2 BlockingQueue接口源码

可以看到BlockingQueue继承自Queue接口,Queue接口也顺便复习下,关于集合框架队列的讲述可以在笔者集合篇.中找到。

public interface BlockingQueue<E> extends Queue<E> {
	//队列中添加元素的方法
    boolean add(E e);
    boolean offer(E e);
    void put(E e) throws InterruptedException;
    boolean offer(E e, long timeout, TimeUnit unit)
        throws InterruptedException;
    //取出元素    
    E take() throws InterruptedException;
    E poll(long timeout, TimeUnit unit)
        throws InterruptedException;
    boolean remove(Object o);
    //
    int remainingCapacity();
    public boolean contains(Object o);
    int drainTo(Collection<? super E> c);
    int drainTo(Collection<? super E> c, int maxElements);
}

drainTo(Collection<? super E> c)方法表示将队列元素全部移除并且放入集合c中,该方法相当于队列全部弹出。

public interface Queue<E> extends Collection<E> {
    /**
     * 添加元素,和offer方法不同的是add方法可能抛出队列状态异常
     */
    boolean add(E e);
    /**
     * 添加元素
     */
    boolean offer(E e);
    /**
     * 和poll()方法相同也是取出头部元素,区别在于队列为空抛出异常
     */
    E remove();
    /**
     * 头部取出元素
     */
    E poll();
    /**
     *  和peek()方法相同,获取队列头部元素,区别在于当队列为空会抛出异常
     */
    E element();
    /**
     * 获取队列头部元素,不对队列进行修改
     */
    E peek();
}

BlockingQueue的offer,poll方法实现了重载,可设置等待时间,其余相关操作概率完全一样。

到此这篇关于Java中的BlockingQueue接口源码解析的文章就介绍到这了,更多相关BlockingQueue接口源码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java阻塞延迟队列DelayQueue原理及使用详解

    Java阻塞延迟队列DelayQueue原理及使用详解

    这篇文章主要介绍了Java阻塞延迟队列DelayQueue原理及使用详解,阻塞队列是一个支持两个附加操作的队列,这两个附加的操作是:在队列为空时,从队列中获取元素的消费者线程会一直等待直到队列变为非空,需要的朋友可以参考下
    2023-12-12
  • Springboot-注解-操作日志的实现方式

    Springboot-注解-操作日志的实现方式

    这篇文章主要介绍了Springboot-注解-操作日志的实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 浅谈mybatis-plus批量保存异常及效率优化

    浅谈mybatis-plus批量保存异常及效率优化

    本文主要介绍了mybatis-plus批量保存异常及效率优化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • Springboot实现图片上传功能的示例代码

    Springboot实现图片上传功能的示例代码

    本篇文章主要介绍了SpringBoot如何实现图片上传功能,文中通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2022-09-09
  • Spring注解和同步锁不能同步问题解决

    Spring注解和同步锁不能同步问题解决

    这篇文章主要介绍了Spring注解和同步锁不能同步问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Java调用Shell命令和脚本的实现

    Java调用Shell命令和脚本的实现

    这篇文章主要介绍了Java调用Shell命令和脚本的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • springMvc注解之@ResponseBody和@RequestBody详解

    springMvc注解之@ResponseBody和@RequestBody详解

    本篇文章主要介绍了springMvc注解之@ResponseBody和@RequestBody详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • JAVA 拷贝文件的几种方式小结

    JAVA 拷贝文件的几种方式小结

    本文主要介绍了JAVA拷贝文件的几种方式,包含普通拷贝,mmap内存映射的方式拷贝,零拷贝sendFile方式实现和多线程的方式实现拷贝,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • 深入理解java中i++和++i的区别

    深入理解java中i++和++i的区别

    下面小编就为大家带来一篇深入理解java中i++和++i的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • MyBatis实现字段加解密的实践

    MyBatis实现字段加解密的实践

    为了数据安全问题,有时候需要将部分敏感字段加密后再入库,本文主要介绍了MyBatis实现字段加解密的实践,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11

最新评论