isa*_*pir 26 java queue concurrency blockingqueue
在无限循环中使用队列中的值时 - 更有效:
1)阻止队列,直到通过take()获得值
while (value = queue.take()) { doSomething(value); }
Run Code Online (Sandbox Code Playgroud)
2)睡眠n毫秒并检查物品是否可用
while (true) {
if ((value = queue.poll()) != null) { doSomething(value); }
Thread.sleep(1000);
}
Run Code Online (Sandbox Code Playgroud)
awk*_*ksp 49
阻止可能更有效.在后台,take()如果没有可用的元素,最初调用的线程将进入休眠状态,让其他线程执行他们需要做的任何事情.然后,添加元素到Queue的方法将在添加元素时唤醒等待线程,因此花费最少的时间一遍又一遍地检查队列是否有元素可用.