当前位置: 首页 > 知识库问答 >
问题:

ArrayBlockingQueue add方法是即时的吗?

邵城
2023-03-14

对于Java中的ArrayBlockingQueue,does queue。添加(元素)是否锁定了它所在的线程?我有一个运行着数十个线程的应用程序,这些线程将所有信息放入一个ArrayBlockingQueue。线程无法承受任何短时间的锁定。如果他们都在将对象放入队列中,add方法会立即继续,让队列在将来将对象放入自己的队列中,还是等到对象实际放入队列中?

共有3个答案

尉迟阳煦
2023-03-14

在ArrayBlockingQueue中,并发操作由java.util.concurrent.locks.ReentantLock保护。并且操作是同步的。当您将项目添加到队列时,添加操作在入列操作完成后返回。

彭烨烁
2023-03-14

是的,当您在ArrayBlockingQueue中调用add方法时,它将需要锁来执行操作,否则它将如何使线程安全。如何将您的对象放在多线程环境中的任何共享变量中。您需要同步。您可以检查一些非阻塞集合(可以创建自己的链表)。您将在其中添加您的值,然后一个守护程序线程将一个接一个地读取并放入队列。

JAVA实现

add方法内部调用offer。如果您不想等待超过给定时间,可以使用公共布尔tryLock(长超时,时间单位)

public boolean offer(E e) {
        checkNotNull(e);
        final ReentrantLock lock = this.lock;
        lock.lock();
        try {
            if (count == items.length)
                return false;
            else {
                enqueue(e);
                return true;
            }
        } finally {
            lock.unlock();
        }
    }
卫飞
2023-03-14

ArrayBlockingQueue是Queue的实现,它还支持在检索元素时等待队列变为非空,在存储元素时等待队列中的空间变为可用的操作。

如果可以在不超过队列容量的情况下立即在该队列的尾部插入指定的元素,add方法将在成功时返回true,如果该队列已满,则抛出IllegalStateException。

尝试将元素放入完整队列将导致操作阻塞;尝试从空队列中获取元素也会类似地阻塞。

一旦创建,容量就不能更改。

 类似资料:
  • 本文向大家介绍PHP实现上传多图即时显示与即时删除的方法,包括了PHP实现上传多图即时显示与即时删除的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP实现上传多图即时显示与即时删除的方法。分享给大家供大家参考,具体如下: 就像这样的,每选择一个图片就会即时显示出来,附加到右边,也可以随意删除一个元素。 其实是,当type=file的input框框的onchange事件===》》》

  • 默认情况下,Spring数据JPA已禁用自动提交 因此,如果我使用/扩展CrudRepository来使用save方法保存对象,那么场景后面会发生什么??将对象保存到DB后,spring jpa是否也提交该操作 如果没有,如何显式提交操作? 编辑以下“Michal Drozd”评论:(以下是针对JpaRepository而非Crudepository)本文:Spring数据JPA中save()和s

  • 问题内容: 在Python中,我希望能够创建一个既充当类函数又充当实例方法的函数,但是具有更改行为的能力。用例是针对一组可序列化的对象和类型。举个例子: 我知道给定Python源中funcobject.c中classmethod()的定义,这看起来像使用C模块一样简单。有没有办法从python内部执行此操作? 谢谢! 有了描述符的提示,我可以使用以下代码来做到这一点: 谢谢亚历克斯! 问题答案:

  • 所以我用这个mock(potatoConsumer)订阅,rxJava调用了“accept”,mockito将其标记为交互,但mockito认为这个交互不是我所期望的,为什么? 图书馆的版本使用了她: 一些由powermock模拟的字段在“验证”时失败,但由mockito模拟的字段不是 Mockito不能模拟未打开的字段,没有,但Mockito与Powermock maker inline冲突 P

  • 本文向大家介绍PHP实现即时输出、实时输出内容方法,包括了PHP实现即时输出、实时输出内容方法的使用技巧和注意事项,需要的朋友参考一下 老生长谈了。。纯备忘 对于运行时间较长的PHP程序来说可能都需要即时输出内容来查看运行情况。 例, 按例子测试,达到了PHP即时实时输出内容的效果。

  • 在运行我的程序后,我得到这个奇怪的崩溃发生大约2个小时运行它,说明它不能解析日期。 有没有人知道它为什么会给这个?因为当我在网上寻找,我发现它可能是由于一个不正确的格式,但由于我没有指定的格式这不是我的情况。 解析我的时间戳的代码如下: 注意:方法返回一个字符串,如: 更新#1:以下代码重复了此问题: 生成以下stacktrace