Adnotacje dla klas, pól i metod, które pozwalją wskazać strategie bezpieczeństwa wątkowego.
Trzy adnotacje poziomu klasy opisują zamierzone bezpieczeństwo wątkowe klas:
@Immutable
, @ThreadSafe
i @NotThreadSafe
.
@Immutable
oznacza, że klasa jest niezmienna i
jednocześnie oznacza też @ThreadSafe
.
@NotThreadSafe
jest opcjonalne;
jeśli klasa nie zawiera adnotacji o bezpieczeństwie wątkowym, powinna być traktowana jako
niezabezpieczona, ale zawsze lepiej jawnie użyć adnotacji
@NotThreadSafe
.
Adnotacje są mało inwazyjne i mają na celu służyć jako oznaczenia dla
użytkowników i konserwatorów. Użytkownicy od razu dowiadują się, że klasa
jest bezpieczna wątkowo, a konserwatorzy wiedzą od razu, że muszą szczególnie uważać,
by zachować bezpieczeństwo wątkwe. Adnotacje przydają się rownież
automatycznym narzedziom. Narzędzia analizy statycznej mogą ich używać
do sprawdzenia, czy kod rzeczywiście wywiązuje się z przyrzeczeń podanych w
adnotacjach, na przykład czy rzeczywiście klasa oznaczona jako
@Immutable
jest niezmienna.
Adnotacje poziomu klasy stanowią publiczne powiadomienie o możliwościach klasy. Inne aspekty adnotacyjne kierowane są przede wszystkim do konserwatorów kodu i nie stanowią publicznej dokuentacji klasy.
Klasy używajace blokad powinny dokumentować, które zmienne stanu są chronione blokadami i jakie to są dokładnie blokady. Częstym źródłem niezamierzonej utraty bezpieczeństwa wątkowego jest niespójne stosowanie blokad, bo w późniejszym okresie dodano nowe zmienne stanu, któych nie chronią żądne blokady lub nowe metody stosują inne blokady niż powinny do ochrony tej samej zmiennej stanu. Dokumentowanie zmiennych stanu i blokad, któe je chronią pozwala uniknąć wspomnianych problemów
Adnotacja @GuardedBy(lock)
wskazuje, że dane pole lub metoda powinno być chronione
podaną w nawiasach blokadą.
Copyright (c) 2005 Brian Goetz and Tim Peierls Udostępnione na licencji Creative Commons Attribution License (http://creativecommons.org/licenses/by/2.5) Oficjalna witryna: http://www.jcip.net Dowolna ponowna publikacja lub praca zależna dystrybuowana w postaci kodu źródłowego Musi zawierac powyższa informację o prawach autorskich i licencji.