Właśnie zacząłem czytać Współbieżność Java w praktyce, ze strony 17:
Użyliśmy terminów "klasa bezpieczna dla wątków" i"Program wątkowy" do tej pory prawie wymiennie. Czy taki program jest bezpieczny dla wątków zbudowany w całości z klas bezpiecznych dla wątków? Niekoniecznie-a Program, który składa się wyłącznie z klas wątków bezpiecznych, może nie być Wątek bezpieczny, a program bezpieczny dla wątków może zawierać klasy, które są nie wątki bezpieczne.
- W jaki sposób program bezpieczny dla wątków może zawierać klasy, które nie są bezpieczne dla wątków? Dodatkowy przykład kodu będzie naprawdę doceniony.
Odpowiedzi:
5 dla odpowiedzi № 1Istnieją dwa podstawowe przypadki, w których jest to możliwe:
Obiekty nie podlegające gwintowaniu są ograniczone do pojedynczych nici.
Dostęp do współdzielonych obiektów niechronionych wątkiem jest zewnętrznie koordynowany przez wątki, które ich używają. Niezwykle uproszczony przykład: synchronizując cały dostęp z
synchronized( sharedObject ) { sharedObject.access(); }
1 dla odpowiedzi nr 2
Ponieważ do zmiennych lokalnych można uzyskać dostęp tylko przez jeden wątek, program może być bezpieczny dla wątków i używać zmiennych lokalnych, których klasa jest czymś, co w innych okolicznościach nie byłoby bezpieczne dla wątków.