同步LinkedList中的java.util.NoSuchElementException

时间:2015-12-06 13:49:33

标签: java multithreading concurrency linked-list synchronization

在生成器和使用者数量访问同步Queue之后,它被同步但在从队列中提取元素时仍然给出java.util.NoSuchElementException。它有什么问题以及如何解决它。

public class Que{

    private Queue queue = new LinkedList();

    public synchronized void enqueue(Runnable r) {
      queue.add(r);
      notifyAll();
    }

    public synchronized Object dequeue(){
        Object object = null;
        try{
            while(queue.isEmpty()){
                  wait();
            }
        } catch (InterruptedException ie) {

        }
        object = (Object)queue.remove();// This line is generating exception
        return object;
    }

}

1 个答案:

答案 0 :(得分:0)

我发现了问题,我也解决了。 发生了InterruptedException并且需要在catch语句中恢复中断状态,还需要按如下方式返回。

public class Que{

    private Queue queue = new LinkedList();

    public synchronized void enqueue(Runnable e) {
      queue.add(e);
      notifyAll();
    }

    public synchronized Object dequeue(){
        Object object = null;
        try{
            while(queue.isEmpty()){
                  wait();
            }
        } catch (InterruptedException ie) {
          Thread.currentThread().interrupt();//restore the status
           return ie;//return InterruptedException object 
        }
        object = (Object)queue.remove();// This line is generating exception
        return object;
    }

}