Я пытаюсь создать собственный вариант BlockingQueue, основанный на одном из found here.Проблемы с реализацией BlockingQueue с нуля
public class ThreadSafeContainer<E> {
private Node front;
private Node end;
private int capacity;
private int size;
public ThreadSafeContainer(int capacity) {
size = 0;
this.capacity = capacity;
}
public synchronized void add(E item) {
while (size == capacity) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if (size == 0) {
notifyAll();
}
Node tmp = new Node(item);
if (end == null) {
front = tmp;
end = tmp;
} else {
end.next = tmp;
end = end.next;
}
size++;
}
public synchronized E remove() {
while (size == 0) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if (size == capacity) {
notifyAll();
}
E item = front.item;
front = front.next;
size--;
return item;
}
private class Node {
E item;
Node next;
public Node(E item) {
this.item = item;
}
}
Но по какой-то причине, когда я пытаюсь запустить темы, как так
Thread thread1 = new Thread() {
public void run() {
queue.add(1);
queue.add(2);
}
};
Thread thread2 = new Thread() {
public void run() {
System.out.println(queue.remove());
System.out.println(queue.remove());
}
};
Я получаю это исключение
Исключение в потоке "Thread-3" java.lang.NullPointerException в ThreadSafeContainer.remove (ThreadSafeContainer.java:52) в ThreadPractice $ 2.run (ThreadPractice.java:17) at java.lang.Thread.run (Неизвестный источник)
Я могу удалить ошибку, изменив размер == 0 на front == null, но он все равно не выводит то же самое.
Возможный дубликат [Что такое исключение NullPointerException и как его исправить?] (Http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix -it) – bradimus
@bradimus Функционально мой код должен вести себя одинаково, за исключением использования ранее существовавшей структуры списка, которую я разработал самостоятельно. Размер ++/- должен отражать эффекты примера, который я использовал. Тем не менее, он работает отлично, в то время как у меня есть ошибки. – generaltsao