获取LinkedList中的所有元素,例外

时间:2016-11-15 11:17:15

标签: java multithreading nullpointerexception linked-list

我需要获取链表中的所有元素。我通过调用缓冲区中的get()方法( CharacterBuffer )来完成此操作。

但是每当我尝试获取元素时,我都会得到nullPointerException。我不知道如何解决这个问题。

public class Reader extends Thread {
    private GUIMutex gui;
    private CharacterBuffer buffer;

    public Reader(GUIMutex gui, CharacterBuffer buffer) {
        this.gui = gui;
        this.buffer = buffer;
    }

    public void run() {
        String data = "test";
        while (true) {

            try {
                System.out.println(buffer.get());
                gui.setReaderText(data + "\n");
                Thread.sleep(1500);
            } catch (InterruptedException e) {
            }

        }
    }
}



public class CharacterBuffer {

    private char ch;
    private LinkedList buffer = new LinkedList();
    private boolean filled = true;

    public void put(char ch) {
        buffer.addLast(ch);
        buffer.removeFirst();
    }

    public Object get() throws InterruptedException {
        while (buffer.isEmpty()) {
            wait();
        }

        // return buffer.removeFirst();
        return buffer.getFirst();
    }

}

2 个答案:

答案 0 :(得分:1)

LinkedList 不是线程安全的...... 并且线程在执行运行方法时获得内存的副本...

使用类似ConcurrentLinkedDeque

的内容

查看doc

答案 1 :(得分:0)

首先,你不能在Linked List中使用char它只接受Wrapper类型。在你的put方法中,你可以同时添加和删除字符。您的链接列表中不会保留任何值。