我使用ConcurrentLinkedQueue
在一组线程处理元素之前对元素进行排队:
public class AsyncActionQueue implements Serializable {
...
private Queue<QueuedAction> queue;
public AsyncActionQueue() {
this.queue = new ConcurrentLinkedQueue<>();
}
...
private class QueueProcessor implements Runnable {
private boolean isKilled = false;
public void run() {
while(!isKilled) {
QueuedAction action = queue.remove();
我认为如果队列中没有更多元素,queue.remove()
将返回null,而是我得到NoSuchElementException
。
这是一种情况,其中队列是单例,并且可以使用弹性线程数来清空它。在尝试删除之前,线程检查队列中是否有元素的最佳方法是什么?我应该检查是否queue.size() > 0
,这意味着线程安全吗?