Joshua Bloch navrhl následujících pět úrovní vláknové bezpečnosti, které bych v tomto zápisku rád shrnul. Razím myšlenku, že každá třída musí mít v komentáři (javadocu) poznámku o této úrovni.

  1. Immutable. Třída je neměnná, takže je také vláknově bezpečná.
  2. Thread-safe. Třída je vláknově bezpečná, je možné ji plně používat v konkurenčním prostředí a třída sama se postará o potřebnou synchronizaci.
  3. Conditionally thread-safe. Třída je vláknově bezpečná za jistých podmínek a tyto podmínky jsou přesně dány. Obvykle to znamená, že se třída musí nacházet v určitém stavu, aby byla bezpečná. Do tohoto stavu ji lze převést například voláním metody.
  4. Thread-compatible. Třída je vláknově kompatibilní, což znamená, že ačkoli není interně synchronizována, pokud volající zajistí zamykání pro volání všech metod, lze třídu považovat za bezpečnou. Typicky lze takovou třídu obalit wrapperem, který bude zajišťovat synchronizaci pro všechny metody.
  5. Thread-hostile. Třída není vláknově bezpečná a není možné ji použít v konkurenčním prostředí. Typicky jsou to třídy pracující s externími prostředky či statickými daty.

Tento zápisek vznikl převodem z mého starého blogu. Ne všechny texty byly takto převedeny, kompletní archiv již není k dispozici.