gpt4 book ai didi

java - 我如何为 Java 队列/列表自动执行 "enqueue if free space OR dequeue then enqueue"?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:20:11 25 4
gpt4 key购买 nike

我需要一个具有固定容量但始终允许线程将项目添加到开头的 Java 列表。如果它已满,它应该从末尾删除一个项目以腾出空间。没有其他进程会删除项目,但其他进程会希望迭代这些项目。

JDK 中有什么东西可以让我以原子方式执行此操作吗?

我目前的计划只是使用一些现有的线程安全集合(例如 LinkedBlockingQueue),并在我检查容量/添加/删除时进一步同步它。那也行吗?

谢谢。

最佳答案

您的想法可行,但需要取出多把锁(参见下面的示例)。假设您在添加数据时需要同步多个操作,您不妨包装一个 QueueLinkedList 实现,以避免额外锁的开销

// Create queue with fixed capacity.
Queue<Item> queue = new LinkedBlockingQueue<Item>(1000);

...

// Attempt to add item to queue, removing items if required.
synchronized(queue) { // First lock
while (!queue.offer(item)) { // Second lock
queue.take(); // Third lock
}
}

关于java - 我如何为 Java 队列/列表自动执行 "enqueue if free space OR dequeue then enqueue"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1339434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com