/ / W jaki sposób program bezpieczny dla wątków może zawierać klasy, które nie są bezpieczne dla wątków? - Java, wielowątkowość, współbieżność

W jaki sposób program bezpieczny dla wątków może zawierać klasy, które nie są bezpieczne dla wątków? - Java, wielowątkowość, współbieżność

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 № 1

Istnieją dwa podstawowe przypadki, w których jest to możliwe:

  1. Obiekty nie podlegające gwintowaniu są ograniczone do pojedynczych nici.

  2. 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.