【发布时间】:2016-10-20 07:42:53
【问题描述】:
我正在尝试在 java 中创建一个固定大小的队列,我只想在队列中存储最多 10 个对象。但是,队列继续存储/添加对象并忽略if 条件。
我的代码:
Queue<Customer> sitt = new LinkedList<Customer>();
if(sitt.size() < 10) {
System.out.println("Added");
((LinkedList<Customer>)sitt).offer(cust);
}else {
System.out.println("No space..");
}
我有另一个 Runnable 类,我正在运行 22 个线程。此条件应仅添加 Customer 类的 0-9 对象。但是,sitt.size() 甚至超过 20。谁能告诉我这里有什么问题?甚至if 条件也被忽略了。
P.S:我在这里使用 Queue 的原因是因为我需要 FIFO。
【问题讨论】:
-
为什么要使用 LinkedList?一个简单的循环缓冲区也可以工作
-
由于您处于多线程场景中,因此您应该将 if 条件和添加到同步块中。也许其他线程在其他线程添加元素之前检查队列大小。
-
@Karura91 是的,它在同步块内。
Added打印了 22 次。和sitt.size()继续增加而不是停止它 10。@Domso 我将检查循环缓冲区。 @Stefan 我已经在使用 LinkedList 的这种队列方式,但它忽略了if条件。 -
@Nix 我看不出这段代码有什么问题。你也可以发布与同步相关的代码吗?
标签: java multithreading java.util.concurrent