2016-10-20 4 views
0

Я пытаюсь создать постоянную очередь размера в 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 темы. Это условие должно только добавить 0-9 объектов класса Customer. Однако, sitt.size() даже превышают 20. Может ли кто-нибудь сказать мне, в чем проблема? что даже условие if игнорируется.

P.S: Причина, по которой я использую Queue здесь, потому что мне нужен FIFO.

+0

Почему вы используете LinkedList? простой циркулярный буфер тоже будет работать – Domso

+0

http://stackoverflow.com/questions/9580457/fifo-class-in-java – Stefan

+1

Поскольку вы работаете в многопоточном сценарии, вы должны поместить условие if и добавить в синхронизированный блок. Возможно, другие потоки проверяют размер очереди до того, как другие потоки добавят свои элементы. – Karura91

ответ

3

Вы можете просто использовать LinkedBlockingQueue от java.util.concurrent - он позволяет указать фиксированный размер для очереди.

new LinkedBlockingQueue<>(10); 

Затем вы можете вставить значения в него, используя offer() метод, который не будет делать ничего и вернуть false, если очередь уже заполнена.

+1

Или ArrayBlockingQueue или ConcurrentLinkedDeque или ConcurrentArrayQueue или ArrayDeque или LinkedBlockingDeque +1 –

+0

Спасибо за предложения, я собираюсь попробовать все это. Однако LinkedBlockingQueue <> (10); не решила проблему. Я собираюсь обновить свой вопрос с полными кодами. – Nix

+0

@Nix, не глядя на код, я предполагаю, что вы имеете дело с разными экземплярами очередей. То есть вы можете добавить элемент в одну очередь, но по ошибке проверьте размер другого. –

 Смежные вопросы

  • Нет связанных вопросов^_^