我试图在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:我在这里使用队列的原因是因为我需要FIFO。
2条答案
按热度按时间cgvd09ve1#
您可以只使用
java.util.concurrent
中的LinkedBlockingQueue
-它允许您指定队列的固定大小。然后,您可以使用
offer()
方法向其中插入值,该方法将不执行任何操作,如果队列已满,则返回false
。gwo2fgha2#
很明显,这样的实现会有问题--从多个线程访问共享资源(队列),而它们之间没有任何同步。这导致所谓的“竞争”条件。在极端情况下:所有线程读取
size
,其等于0。所有线程执行条件体并添加新元素。我会使用一些公共解决方案来实现“共享(阻塞)循环队列”,或者通过线程安全(通过锁定或其他方式)“数组中的整数计数器”来实现它。