Я использую LinkedBlockingQueue для неявной синхронизации для моего приложения, но всегда, если я использую queue.take()
или queue.poll()
, первые несколько элементов как-то пропадают после получения из очереди. Я уже проверял, является ли это одним и тем же объектом.Отсутствуют первые элементы LinkedBlockingQueue
Вот мой код:
for (QueryResult result : tmpPage) {
String objectId = result.getPropertyValueByQueryName("cmis:objectId");
writer.writeFile(objectId); //Only for debugging reasons to
//compare the input and the output
try {
batchJobs.offer(new Node(objectId), 1,TimeUnit.HOURS);
} catch(Exception e) {
errorLogger.error(e.getMessage());
}
}
Место, где я беру или опрашивать
Node node = null;
while (!nodes.isEmpty()) {
while((node = nodes.take())!=null) {
writer.writeFile(node.getObjectID()); // Only for debugging reasons
if (node != null) {
//Do some stuff
}
}
}
ли кто-то испытал что-то подобное?
Можете ли вы пояснить «первый несколько элементов как-то пропадают после получения из очереди "? Вы имеете в виду, что после удаления элемента из очереди он больше не доступен? BTW, 'if (node! = Null)' не требуется. Вы гарантировали, что 'node! = Null' в условии вашего внутреннего цикла while. – bradimus