ConcurrentLinkedDeque 能否具有固定大小并覆盖旧元素?
Can ConcurrentLinkedDeque have a fixed size and overwrite old elements?
如果我没看错的话 ConcurrentLinkedDeque 可以作为一个堆栈,如果你使用 pollLast()
?
现在我的问题是我需要一组大小的 ConcurrentLinkedDeque。我的制作人不会停止,所以即使我有 16GB 的内存,我最终也会 运行 出来。那么是否可以设置固定大小?
我的实现:
ConcurrentLinkedDeque<String> queue = new ConcurrentLinkedDeque<>();
生产者(线程 1):运行s queue.add(line);
消费者(线程 2):运行s queue.pollLast();
请注意两个 线程运行 在一个while true 循环 中。这是因为要求。这就是为什么我使用 ConcurrentLinkedDeque
而不是 ArrayBlockingQueue
或 SynchronousQueue
因为它是非阻塞的。
我还需要申报什么吗synchronised
?
Can ConcurrentLinkedDeque
have a fixed size?
不,是"an unbounded concurrent Deque
based on linked nodes."
Do I need to declare anything synchronised
?
ConcurrentLinkedDeque
本身是线程安全的。只有复合操作才需要同步(如覆盖旧元素)。
Can ConcurrentLinkedDeque
overwrite old elements?
我认为没有这样的方法。这是一个复合动作,需要
- 记住您要更改的元素的位置以及所有出现的元素 before/after;
- 更改元素;
- 恢复顺序(放回元素)。
这三个动作应该在一个 synchronized
块中执行。
如果我没看错的话 ConcurrentLinkedDeque 可以作为一个堆栈,如果你使用 pollLast()
?
现在我的问题是我需要一组大小的 ConcurrentLinkedDeque。我的制作人不会停止,所以即使我有 16GB 的内存,我最终也会 运行 出来。那么是否可以设置固定大小?
我的实现:
ConcurrentLinkedDeque<String> queue = new ConcurrentLinkedDeque<>();
生产者(线程 1):运行s queue.add(line);
消费者(线程 2):运行s queue.pollLast();
请注意两个 线程运行 在一个while true 循环 中。这是因为要求。这就是为什么我使用 ConcurrentLinkedDeque
而不是 ArrayBlockingQueue
或 SynchronousQueue
因为它是非阻塞的。
我还需要申报什么吗synchronised
?
Can
ConcurrentLinkedDeque
have a fixed size?
不,是"an unbounded concurrent Deque
based on linked nodes."
Do I need to declare anything
synchronised
?
ConcurrentLinkedDeque
本身是线程安全的。只有复合操作才需要同步(如覆盖旧元素)。
Can
ConcurrentLinkedDeque
overwrite old elements?
我认为没有这样的方法。这是一个复合动作,需要
- 记住您要更改的元素的位置以及所有出现的元素 before/after;
- 更改元素;
- 恢复顺序(放回元素)。
这三个动作应该在一个 synchronized
块中执行。