在调用remove()

时间:2016-09-06 18:10:34

标签: java multithreading thread-safety queue

我使用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,这意味着线程安全吗?

0 个答案:

没有答案