这两段代码的输出顺序不同。
第一段代码:
请注意,
只有当
while(!jobQueue.isEmpty()) {
TimeoutJobRequest job = jobQueue.peek();
if(job.isReady()) {
execute(job);
jobQueue.poll();
} else {
return;
}
}
第二部分:
jobQueue.stream()
.filter(TimeoutJobRequest::isReady)
.peek(jobQueue::remove)
.forEach(this::execute);
请注意,
jobQueue
是一个 PriorityBlockingQueue
。只有当
this::execute
比较长(比如几秒钟)时才会重新排序。
PriorityBlockingQueue#stream
方法不会按照队列优先级对元素进行排序。 - Misha