Top Description Methods
com.google.errorprone.annotations

public @Interface ThreadSafe

extends Annotation
Annotations
@Target:TYPE
@Retention:RUNTIME
@Inherited
@Documented
Static Imports
java.lang.annotation.ElementType.TYPE, .RetentionPolicy.RUNTIME

This annotation indicates that the class/interface it is applied to is thread safe

An object is thread safe if no sequences of accesses (like reads and writes to public fields or calls to public methods) may put the object into an invalid state, or cause it to violate its contract, regardless of the interleaving of those actions at runtime.

This annotation has two related-but-distinct purposes:

Note that passing the checks performed by the ThreadSafeChecker is neither necessary nor sufficient to guarantee the thread safety of a class. In fact, it is not possible to determine thread safety through static code analysis alone, and the goal of ThreadSafeChecker is to steer the code towards using standard thread-safe patterns, and then to assist the developer in avoiding common mistakes. It is not meant as a substitute for diligent code review by a knowledgeable developer.

Also note that the only easy way to guarantee thread-safety of a class is to make it immutable, and you should do that whenever possible (or at the least, make as much of the class be immutable). Otherwise, writing a thread-safe class is inherently tricky and error prone, and keeping it thread-safe is even more so.

The remainder of this javadoc describes the heuristics enforced by ThreadSafeChecker and the related com.google.errorprone.bugpatterns.threadsafety.GuardedByChecker and com.google.errorprone.bugpatterns.threadsafety.ImmutableChecker on which the former relies.

The ThreadSafeChecker heuristics enforce that every field meets at least one of these requirements:

Below, more details about what is meant by "deemed inherently deeply thread-safe" are presented, and, afterwards, more about GuardedBy.

A type is deemed inherently deeply thread-safe if it meets two requirements. The first requirement is that it meets at least one of these four conditions:

This first requirement means the type is at least inherently shallowly thread-safe.

Fields annotated with javax.annotation.concurrent.GuardedBy are likely the meat of a mutable thread-safe class: these are things that need to be mutated, but should be done so in a safe manner -- i.e., (most likely) in critical sections of code that protect their access by means of a lock. See more information in that annotation's javadoc.

As stated before, the heuristics above are not sufficient to guarantee the thread safety of a class. Also as stated before, thread-safety is tricky, and requires diligent analysis by skilled people. That said, we provide here a few examples of common examples of ways to break these heuristics, so as to help you avoid them:

Also see https://errorprone.info/bugpattern/ThreadSafe

Method Summary

Inherited from java.lang.annotation.Annotation:
annotationTypeequalshashCodetoString