Cześć ;)
Założmy, że mamy napisaną klasę listy, w której wszystkie metody są synchronizowane.
Rozważmy następującą sytuację:
Mamy sto wątków działających współbieżnie.
Lista ma jeden element. Wątek pierwszy chce coś usunąć z listy. Zatem sprawdza if-em czy jest pusta. Dostaje odpowiedź, że nie, zatem uzyskuje zgodę na usunięcie. W tym samym momencie może się zdarzyć, że inny wątek ściągnie z listy element. I tamten pierwszy będzie ściągał z pustej listy.
Jak się zabezpieczyć?
P.S.
I wiem o wszelkiej maści synchronizowanych listach oferowanych przez JAVĘ, ale jak widać, stoję przed problemem, który warto byłoby umieć rozwiązać, a nie, że zastosuję gotowca a nie wiem jak działa
- Rejestracja:prawie 11 lat
- Ostatnio:prawie 9 lat
- Postów:199
0
edytowany 1x, ostatnio: mielony

- Rejestracja:ponad 21 lat
- Ostatnio:około 3 lata
- Lokalizacja:Space: the final frontier
- Postów:26433
1
? Cała operacja, czyli zarówno sprawdzenie jak i usuwanie musi być w sekcji krytycznej. Musisz się synchronizować na tej liście w odpowiednim miejscu.
synchronized(lista){
// bla bla
}
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.