如果我理解正确,那么如果您使用pollLast()
,ConcurrentLinkedDeque就可以像堆栈一样使用?
现在,我的问题是我需要设定大小的ConcurrentLinkedDeque。我的制作人不会停下来,所以即使我有16GB的内存,我最终也会用光。这样可以设置固定大小吗?
我的实现:
ConcurrentLinkedDeque<String> queue = new ConcurrentLinkedDeque<>();
生产者(线程1):运行queue.add(line);
使用者(线程2):运行queue.pollLast();
请注意,两个线程均在 while true循环中运行。这是由于要求。这就是为什么我使用ConcurrentLinkedDeque
而不是ArrayBlockingQueue
或SynchronousQueue
的原因,因为它是非阻塞的。
我还需要声明任何内容synchronised
吗?
答案 0 :(得分:2)
ConcurrentLinkedDeque
的大小可以固定吗?
否,这是“基于链接节点的无界并发Deque
。”
我需要声明什么
synchronised
吗?
ConcurrentLinkedDeque
本身是线程安全的。仅对于复合操作(例如覆盖旧元素)才需要同步。
ConcurrentLinkedDeque
可以覆盖旧元素吗?
我不认为有这种方法。这是需要执行的复合操作
这三个动作应在synchronized
块内执行。