Допустим, у нас есть очередь
BlockingQueue<String> queue= new LinkedBlockingQueue<>();
и какой-то другой поток помещает в него значения, тогда мы читаем это как
while (true) {
String next = queue.take();
System.out.println("next message:" + next);
}
Как я могу перебирать эту очередь в потоковом стиле, сохраняя семантику, аналогичную приведенному выше коду.
Этот код проходит только через текущее состояние очереди:
queue.stream().forEach(e -> System.out.println(e));
while
, не завершается и печатает каждую строку, помещенную в очередь. В приведенном ниже примере потока печатаются только те элементы, которые находились внутри очереди на момент создания потока, т. е. конечное число. - person C-Otto   schedule 10.03.2017