Java並行処理プログラミングのアノテーション
「Java並行処理プログラミング」で書かれていたアノテーションを使う方法。
Maven2 でこういう dependency を定義。以上。現時点ではマーキング以上の意味はありませんが。
net.jcip jcip-annotations 1.0
以下 JavaDoc を引用。
- net.jcip.annotations.GuardedBy
- 対象: FIELD, METHOD
The field or method to which this annotation is applied can only be accessed when holding a particular lock, which may be a built-in (synchronization) lock, or may be an explicit java.util.concurrent.Lock.
The argument determines which lock guards the annotated field or method:
this
: The intrinsic lock of the object in whose class
the field is defined.
class-name.this
: For inner classes, it may be necessary
to disambiguate 'this'; the class-name.this designation allows
you to specify which 'this' reference is intended
itself
: For reference fields only; the object to which
the field refers.
field-name
: The lock object is referenced by the
(instance or static) field specified by field-name.
class-name.field-name
: The lock object is reference by
the static field specified by class-name.field-name.
method-name()
: The lock object is returned by calling
the named nil-ary method.
class-name.class
: The Class object for the specified
class should be used as the lock object.- net.jcip.annotations.Immutable
- 対象: TYPE
The class to which this annotation is applied is immutable. This means that its state cannot be seen to change by callers, which implies that
- all public fields are final,
- all public final reference fields refer to other immutable objects,
and- constructors and methods do not publish references to any internal
state which is potentially mutable by the implementation.Immutable objects may still have internal mutable state for purposes of performance optimization; some state variables may be lazily computed, so long as they are computed from immutable state and that callers cannot tell the difference.
Immutable objects are inherently thread-safe; they may be passed between threads or published without synchronization.
- net.jcip.annotations.ThreadSafe
- 対象: TYPE
The class to which this annotation is applied is thread-safe. This means that no sequences of accesses (reads and writes to public fields, calls to public methods) may put the object into an invalid state, regardless of the interleaving of those actions by the runtime, and without requiring any additional synchronization or coordination on the part of the caller.
- net.jcip.annotations.NotThreadSafe
- 対象: TYPE
The class to which this annotation is applied is not thread-safe. This annotation primarily exists for clarifying the non-thread-safety of a class that might otherwise be assumed to be thread-safe, despite the fact that it is a bad idea to assume a class is thread-safe without good reason.