我需要得到链表中的所有元素。我通过在我的缓冲区(CharacterBuffer)中调用get()
方法来做到这一点。
但是每次我尝试获取元素时,我都会得到一个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();
}
}
LinkedList不是线程安全的…并且线程在执行run方法时获得内存的副本…
使用ConcurrentLinkedDeque
查看文档
第一件事你不能在链表中使用char,它只接受包装类型。在你的put方法中,你同时添加和删除字符。链接列表中没有任何值。