私のアプリケーションに暗黙的な同期のために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
}
}
}
をポーリング場所は誰かが似たような経験がありますか?
「最初のいくつかの要素が何らかの理由でキューから取得した後に失われていますか?キューから要素を削除した後は使用できなくなることを意味しますか?ところで、if(node!= null) 'が不要です。内側の 'while'ループの条件で' node!= null'を保証しました。 – bradimus