Home | History | Annotate | Download | only in concurrent
      1 package javax.annotation.concurrent;
      2 
      3 import java.lang.annotation.Documented;
      4 import java.lang.annotation.ElementType;
      5 import java.lang.annotation.Retention;
      6 import java.lang.annotation.RetentionPolicy;
      7 import java.lang.annotation.Target;
      8 
      9 /*
     10  * Copyright (c) 2005 Brian Goetz
     11  * Released under the Creative Commons Attribution License
     12  *   (http://creativecommons.org/licenses/by/2.5)
     13  * Official home: http://www.jcip.net
     14  */
     15 
     16 /**
     17  * Immutable
     18  *
     19  * The class to which this annotation is applied is immutable. This means that
     20  * its state cannot be seen to change by callers. Of necessity this means that
     21  * all public fields are final, and that all public final reference fields refer
     22  * to other immutable objects, and that methods do not publish references to any
     23  * internal state which is mutable by implementation even if not by design.
     24  * Immutable objects may still have internal mutable state for purposes of
     25  * performance optimization; some state variables may be lazily computed, so
     26  * long as they are computed from immutable state and that callers cannot tell
     27  * the difference.
     28  *
     29  * Immutable objects are inherently thread-safe; they may be passed between
     30  * threads or published without synchronization.
     31  */
     32 @Documented
     33 @Target(ElementType.TYPE)
     34 @Retention(RetentionPolicy.CLASS)
     35 public @interface Immutable {
     36 }
     37