Znalazłem to na dos.oracle.comDlaczego muszę synchronizować listy zwrócony przez Collections.synchronizedList
public static List synchronizedList (LIST)
Zwraca zsynchronizowane (thread-safe) lista wspierana przez określoną listę . Aby zagwarantować dostęp szeregowy, ważne jest, aby uzyskać dostęp do listy kopii zapasowych za pośrednictwem zwróconej listy. Konieczne jest, aby użytkownik ręcznie zsynchronizować na zwróconej listy podczas iteracji nad nim:
List list = Collections.synchronizedList(new ArrayList());
...
synchronized(list) {
Iterator i = list.iterator(); // Must be in synchronized block
while (i.hasNext())
foo(i.next());
}
Moje pytanie brzmi: Dlaczego muszę zsynchronizować listę, aby go iterację jeśli Collections.synchronizedList();
ma zwracać już zsynchronizowana lista?
Mam tylko dostęp do listy w dwóch wątkach: Jeden wątek po prostu dodaj, a drugi wątek, aby uzyskać i usunąć. Jakie inne klasy polecasz do tego scenariusza?
Dzięki za przeczytanie.
byłby używam 'Collections.synchronizedList()'. Lepiej może zrobić synchronizację samodzielnie w swoim własnym kodzie – JIV