Witam,
mam problem z synchronizacją danych. Napisałem klasę(model), która przechowuje strukturę w postaci listy powiązanej. Model ten posiada metodę, która dodaje elementy do struktury lub je zmienia, oraz metodę która zwraca strukturę.
w pewnym miejscu w moim programie wywoluje metode, ktora zwraca strukture modelu, tworze iterator i przegladam, ta strukture.
Czasem zdarza się, że program zwraca mi wyjątek:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointer
Sprawdziłem co to oznacza i w tym przypadku chodzi o to, ze czasem podczas przeglądania struktury(iterowania jej) następuje jej zmiana(przez metode z modelu) - stad ten wyjątek.
Z tego co się orientuje, to synchronized mi tu nie pomoże, próbowałam coś z semaforami, które mogą być moim rozwiązaniem, ale niestety za bardzo ich nie rozumiem.
Poniżej zamieszczę okrojony kod i będę wdzięczny za jakąś podpowiedź:
public class Model
{
//struktura przechowujaca punkty
private LinkedList<Element> body = new LinkedList<Element>();public Model(Element startPosition, int lenghtBody) { body.add(startPosition); this.addTail(lenghtBody - 1); } public void addTail(int lenght) { //dodaje do struktury ogon o podanej dlugosci } public void moveModel(Direction inDirection) { //zmienia dane na strukturze } public LinkedList<Element> getBody() { return body; }
}
Gdzies w programie czesto wykonywane jest kod:
...
body = model.getBody();
Iterator iter = body.iterator();while(iter.hasNext())
{
element = iter.next();
System.out.println(element);
}