- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
ArrayBlockingQueue
中没有一个操作与它的任何其他操作并发;他们总是拿同一把锁。即使对于 size()
方法,它也需要一个锁。
public int size() {
final ReentrantLock lock = this.lock;
lock.lock();
try {
return count;
} finally {
lock.unlock();
}
}
虽然对于 LinkedBlockingQueue
的实现,您有两个锁:put 和 take。对于 size()
它使用 AtomicInteger
所以不需要锁。
所以我的问题是:为什么这个实现在并发包中 - ArrayBlockingQueue
真的是并发的吗?
最佳答案
ArrayBlockingQueue
在 java.util.concurrent
中包,因为多个线程可以同时使用该对象而不会出现线程安全问题。
同时使用多种方法的能力不是对象的用途。
关于java - ArrayBlockingQueue - 它真的是并发的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17578228/
当我阅读ArrayBlockingQueue.take方法的源代码时,我遇到了一个问题。 我认为两个线程同时调用 take 方法,只有一个线程可以成功获取锁,而另一个线程将在以下行等待锁:lock.l
我正在寻找与 ArrayBlockingQueue 类似的库。就是这样,我不需要它提供的线程安全功能(为了更好的性能目的),因为它在 offer(E e) 方法中使用了 ReentrantLock 。
我编写了解决有界生产者和消费者问题的程序。在构造 ArrayBlockingQueue 时,我定义了容量 100。我正在使用方法 take 和 put inside threads。而且我注意到有时我
我刚刚在研究 JDK 1.6 时发现ArrayBlockingQueue - 构造函数调用了公共(public)可重写方法之一!我认为这对于 API 来说是一种不好的做法。 public Array
ArrayBlockingQueue 中没有一个操作与它的任何其他操作并发;他们总是拿同一把锁。即使对于 size() 方法,它也需要一个锁。 public int size() {
我正在研究 BlockingQueue 接口(interface),其中 ArrayBlockingQueue 是一个实现。出于演示目的,我开发了以下代码: import java.util.conc
只是为了学习,我编写了以下用于自定义线程池的代码,引用并编辑显示的代码 here. 如代码所示,我使用 ArrayBlockingQueue 作为任务队列。 代码: import java.util.
场景:在我的消费者有机会消费之前,我的生产者填满了数组,比如 capacity new int[10]。我的生产者看到数组已满并阻塞。 然后我的消费者出现并删除了 int[0],并向生产者发出信号,该
关键字synchronize 没有出现在ArrayBlockingQueue 的源代码中。这是否意味着我可以出于“我自己的目的”自由使用它的内在锁?或者这会在未来发生变化吗? 最佳答案 一般来说,我会
我有两个线程,一个分派(dispatch)消息,另一个解析消息。简单,常见。我使用 ArrayBlockingQueue 进行同步,但不希望调度程序直接访问工作消息队列 - 我使用包装器。问题是是否应
您好,我很好奇是否有办法检查 ArrayBlockingQuery 查询当前是否被锁定?原因:我有一个服务器,它监听套接字,接收参数,处理它们,然后将一些结果返回给客户端。该服务器(假设是服务器 A)
我知道下面代码中进行的递增不是原子的。我希望增量、插入阻塞队列和打印计数器的值一起成为一个原子操作。我知道原子 int 但我正在尝试使用同步来使其工作以用于学习目的。 int counter = 0;
对于 Java 中的 ArrayBlockingQueue,queue.add(element) 是否会锁定它所在的线程?我有一个运行着数十个线程的应用程序,它们会将所有信息放入一个 ArrayBlo
我有一个 ArrayBlockingQueue,它有多个与数据库的连接。许多线程尝试通过轮询来获取连接。队列中可用的最大连接数为50,超过50后,线程必须等待连接放回才能获取数据库连接。 问题是我无法
我发现自己在重复这种模式,并且常常想知道这在 Java 中是否是惯用的,或者是否有更好的方法来实现这种行为。 问题:给定生产者/消费者设置,消费者想要处理批量的项目,因此它使用 drainTo(),但
我有一个简单的 ArrayBlockingQueue 测试如下: public class TestQueue { static class Producer implements Runna
ArrayBlockingQueue 包含一个作为数组的缓冲区。它还支持公认的低效 public boolean remove(Object o) Removal of interior elemen
我正在尝试编写一个像ArrayBlockingQueue这样的简单队列,其中如果在添加元素时队列已满,则队列的头部将被删除。该类应该只具有以下公共(public)方法 获取队列的大小 从队列头部获取一
这是我第一次在 StackOverflow 上提问。我遇到的问题如下: 我有一个生产者和消费者类。在 Producer 类中,我逐行读取文件并将这些文本行放入字符串列表中。当列表有 x 行时。该列表被
我正在尝试调整执行以下操作的线程: 只有 1 个线程的线程池 [CorePoolSize =0, maxPoolSize = 1] 使用的队列是 ArrayBlockingQueue 问题 = 20
我是一名优秀的程序员,十分优秀!