SlideShare a Scribd company logo
(Java)
@j5ik2o
@j5ik2o



 Scala
                         6
         5    Java
             Scala

 DDD(                        )

          (4,5,6     )
Singleton   )

                1


GoF
new


Hoge a = new Hoge(); // 1

Hoge b = new Hoge(); // 2       NG




                            1
public class Cache {
    //
 public static final Cache INSTANCE = new
Cache();
    private Cache() { } // new

    public void put(String key, Object value){ ... }
    public Object get(String key) { ... }
}
Cache.INSTANCE.put(key, value)
Object value = Cache.INSTANCE.get(key)
public class Cache {
    private static final Cache INSTANCE = new Cache();
    private Cache() { }
    public static Cache getInstance() {
      return INSTNACE;
    }
    public void put(String key, Object value){ ... }
    public Object get(String key) { ... }
}
Cache.getInstance().put(key, value)
Object value = Cache.getInstance().get(key)
public class Cache {
 private static ThreadLocal<Cache> threadLocal =
new ThreadLocal<Cache>() {
   @Override protected Cache initialValue() {
     return new Cache();
   }
 };
    public static Cache getInstnace() {
      return threadLocal.get();
    }
    public Object get(String key) { /* ... */ }
    public void put(String key, Object value) { /* ... */
                                                         }
}
1:
Effective Java                   3




public class CacheClient {
    //
    public void process() { getCache().put(...); // ... }
    // Cache
    Cache getCache() {
        return Cache.getInstance();
        // ↑

        //                            private

        // new Cache() { ... }

        //                                      ...

    }
}
public class SingletonCache implements Cache {
    private static SingletonCache instance;
    public static SingletonCache getInstnace() {
      return instance;
    }
    @Override public Object get(String key) { /* ... */ }
    @Override public void put(String key, Object value) { /* ... */ }
}
public class CacheClient {
    // ...
    Cache getCache() {
        return new Cache(){ /*             */ };

    }
}
2:
         P40-41
     singleton
3:

                    readObject
                w( o   )w!!!

Serializable

                                  transient
                          ...

  readResolve
  (GC)
         ...
  private Object readResolve() throws
  ObjectStreamException {
   return INSTANCE; //
  }
enum
public enum Cache {
    INSTANCE;
 public vod put(String key, Object
value) { /* ... */ }
 public Object get(String key) {/* ...
*/ }
}
Cache.INSTANCE.put(key, value);
enum                             Jad        ...
public final class Cache extends Enum<Cache>
{
    public static final EnumSingleton INSTANCE;
    private static final Cache $VALUES[];
  static { INSTANCE = new
EnumSingleton("INSTANCE", 0);
    $VALUES = (new Cache[] { INSTANCE }); }
    private Cache(String s, int i){ super(s, i); }
    // values, valueOf ...
}
第1回 チキチキ『( ゜ェ゜)・;'.、ゴフッ』 - シングルトンパターン(Java)
(´    ∀      )
public class Singleton {
    private static Singleton instance;
 public synchronized static Singleton
getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
(    д )               ?!
public class Singleton {
        //

    private static class InstanceHolder {
   private static final Singleton INSTANCE = new
Singleton();
    }
    public static Singleton getInstance() {
        return InstanceHolder.INSTANCE;
    }
}
..(llil!´Д`lil)n{…??
public class Singleton {
    private static volatile Singleton instance
    public static Singleton getInstance() {
     Singleton result = instance; // (1)

     if (result == null) { // (2)             =>

         synchronized (Singleton.class) { // (3)            :

          result = instance; // (4)

          if (result == null) { // (5)

              result = instance = new Singleton(); // (6)

          }
         } //             :

     }
     return result;
}
getInstnace

              ”   ”
Scala   object

object Cache {
 def put(key:String, value:Any):Unit
= ...
    def get(key:String):Any = ...
}
Cache.put(key, value)
val value = Cache.get(key)
object        Singleton
public final class Cache$ implements ScalaObject
{
 public static final Cache$ MODULE$ = new
Cache$();
    private Cache$() { /* ... */ }
 public void put(String key, Object value) { /* ...
*/ }
    public Object get(String key) { /* ... */ }
}
Cache$.MODULE$.put(key, value)
Object value = Cache$.MODULE$.get(key)

More Related Content

第1回 チキチキ『( ゜ェ゜)・;'.、ゴフッ』 - シングルトンパターン(Java)

  • 2. @j5ik2o Scala 6 5 Java Scala DDD( ) (4,5,6 )
  • 3. Singleton ) 1 GoF
  • 4. new Hoge a = new Hoge(); // 1 Hoge b = new Hoge(); // 2 NG 1
  • 5. public class Cache { // public static final Cache INSTANCE = new Cache(); private Cache() { } // new public void put(String key, Object value){ ... } public Object get(String key) { ... } } Cache.INSTANCE.put(key, value) Object value = Cache.INSTANCE.get(key)
  • 6. public class Cache { private static final Cache INSTANCE = new Cache(); private Cache() { } public static Cache getInstance() { return INSTNACE; } public void put(String key, Object value){ ... } public Object get(String key) { ... } } Cache.getInstance().put(key, value) Object value = Cache.getInstance().get(key)
  • 7. public class Cache { private static ThreadLocal<Cache> threadLocal = new ThreadLocal<Cache>() { @Override protected Cache initialValue() { return new Cache(); } }; public static Cache getInstnace() { return threadLocal.get(); } public Object get(String key) { /* ... */ } public void put(String key, Object value) { /* ... */ } }
  • 8. 1: Effective Java 3 public class CacheClient { // public void process() { getCache().put(...); // ... } // Cache Cache getCache() { return Cache.getInstance(); // ↑ // private // new Cache() { ... } // ... } }
  • 9. public class SingletonCache implements Cache { private static SingletonCache instance; public static SingletonCache getInstnace() { return instance; } @Override public Object get(String key) { /* ... */ } @Override public void put(String key, Object value) { /* ... */ } } public class CacheClient { // ... Cache getCache() { return new Cache(){ /* */ }; } }
  • 10. 2: P40-41 singleton
  • 11. 3: readObject w( o )w!!! Serializable transient ... readResolve (GC) ... private Object readResolve() throws ObjectStreamException { return INSTANCE; // }
  • 12. enum public enum Cache { INSTANCE; public vod put(String key, Object value) { /* ... */ } public Object get(String key) {/* ... */ } } Cache.INSTANCE.put(key, value);
  • 13. enum Jad ... public final class Cache extends Enum<Cache> { public static final EnumSingleton INSTANCE; private static final Cache $VALUES[]; static { INSTANCE = new EnumSingleton("INSTANCE", 0); $VALUES = (new Cache[] { INSTANCE }); } private Cache(String s, int i){ super(s, i); } // values, valueOf ... }
  • 15. ∀ ) public class Singleton { private static Singleton instance; public synchronized static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
  • 16. ( д ) ?! public class Singleton { // private static class InstanceHolder { private static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() { return InstanceHolder.INSTANCE; } }
  • 17. ..(llil!´Д`lil)n{…?? public class Singleton { private static volatile Singleton instance public static Singleton getInstance() { Singleton result = instance; // (1) if (result == null) { // (2) => synchronized (Singleton.class) { // (3) : result = instance; // (4) if (result == null) { // (5) result = instance = new Singleton(); // (6) } } // : } return result; }
  • 18. getInstnace ” ”
  • 19. Scala object object Cache { def put(key:String, value:Any):Unit = ... def get(key:String):Any = ... } Cache.put(key, value) val value = Cache.get(key)
  • 20. object Singleton public final class Cache$ implements ScalaObject { public static final Cache$ MODULE$ = new Cache$(); private Cache$() { /* ... */ } public void put(String key, Object value) { /* ... */ } public Object get(String key) { /* ... */ } } Cache$.MODULE$.put(key, value) Object value = Cache$.MODULE$.get(key)

Editor's Notes

  • #2: \n
  • #3: &amp;#x304B;&amp;#x3068;&amp;#x3046;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x6700;&amp;#x8FD1;&amp;#x5F90;&amp;#x3005;&amp;#x306B;&amp;#x5B9F;&amp;#x4F53;&amp;#x3092;&amp;#x6652;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x3057;&amp;#x3089;&amp;#x306A;&amp;#x3044;&amp;#x4EBA;&amp;#x3044;&amp;#x308B;&amp;#x3068;&amp;#x601D;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x30C0;&amp;#x30A4;&amp;#x3061;&amp;#x3083;&amp;#x3093;&amp;#x306E;&amp;#x4E0A;&amp;#x53F8;&amp;#x3068;&amp;#x3044;&amp;#x3048;&amp;#x3070;&amp;#x308F;&amp;#x304B;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x304B;&amp;#x306D;&amp;#x3002;&amp;#x6280;&amp;#x8853;&amp;#x7684;&amp;#x306A;&amp;#x7A81;&amp;#x304D;&amp;#x4E0A;&amp;#x3052;&amp;#x304C;&amp;#x53B3;&amp;#x3057;&amp;#x3044;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x9811;&amp;#x5F35;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x4E0A;&amp;#x53F8;&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;&amp;#x306F;&amp;#x3044;&amp;#x3002;\n&amp;#x6700;&amp;#x8FD1;&amp;#x306F;Scala&amp;#x306E;&amp;#x8A18;&amp;#x4E8B;&amp;#x66F8;&amp;#x304D;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x3002;&amp;#x5165;&amp;#x9580;&amp;#x8005;&amp;#x7528;&amp;#x306E;&amp;#x8A18;&amp;#x4E8B;&amp;#x306A;&amp;#x306E;&amp;#x3067;&amp;#x308F;&amp;#x304B;&amp;#x308A;&amp;#x3084;&amp;#x3059;&amp;#x3044;&amp;#x3068;&amp;#x601D;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;java-ja&amp;#x3067;&amp;#x306F;&amp;#x3001;yuroyoro&amp;#x3055;&amp;#x3093;&amp;#x306B;&amp;#x30EC;&amp;#x30D3;&amp;#x30E5;&amp;#x30FC;&amp;#x983C;&amp;#x307F;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x3002;&amp;#x3042;&amp;#x308A;&amp;#x304C;&amp;#x3068;&amp;#x3046;&amp;#x3054;&amp;#x3056;&amp;#x3044;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x3002;\n&amp;#x305D;&amp;#x308C;&amp;#x3068;&amp;#x3001;DDD&amp;#x3082;&amp;#x7D50;&amp;#x69CB;&amp;#x30C7;&amp;#x30A3;&amp;#x30FC;&amp;#x30D7;&amp;#x306B;&amp;#x3084;&amp;#x3063;&amp;#x3066;&amp;#x307E;&amp;#x3059;&amp;#x3002;2003&amp;#x5E74;&amp;#x306E;&amp;#x767A;&amp;#x520A;&amp;#x3067;&amp;#x5F85;&amp;#x671B;&amp;#x306E;&amp;#x548C;&amp;#x8A33;&amp;#x304C;&amp;#x3067;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x3002;&amp;#x30D5;&amp;#x30A1;&amp;#x30A6;&amp;#x30E9;&amp;#x30FC;&amp;#x6C0F;&amp;#x3082;&amp;#x30B1;&amp;#x30C3;&amp;#x30C8;&amp;#x30D9;&amp;#x30C3;&amp;#x30AF;&amp;#x6C0F;&amp;#x3082;&amp;#x7D76;&amp;#x8CDB;&amp;#x3002;&amp;#x65E5;&amp;#x672C;&amp;#x3060;&amp;#x3068;&amp;#x548C;&amp;#x7530;&amp;#x3055;&amp;#x3093;&amp;#x7B46;&amp;#x982D;&amp;#x306B;JavaEE&amp;#x52C9;&amp;#x5F37;&amp;#x4F1A;&amp;#x306B;&amp;#x3088;&amp;#x308A;&amp;#x8CA2;&amp;#x732E;&amp;#x304C;&amp;#x5927;&amp;#x304D;&amp;#x3044;&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;&amp;#x79C1;&amp;#x3068;&amp;#x30C0;&amp;#x30A4;&amp;#x3061;&amp;#x3083;&amp;#x3093;&amp;#x3067;&amp;#x4E3B;&amp;#x306B;2&amp;#x90E8;&amp;#x306E;\n
  • #4: &amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30C8;&amp;#x30F3;&amp;#x3068;&amp;#x306F;&amp;#x3001;1&amp;#x500B;&amp;#x3057;&amp;#x304B;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x3092;&amp;#x4F5C;&amp;#x3089;&amp;#x306A;&amp;#x3044;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x30D1;&amp;#x30BF;&amp;#x30FC;&amp;#x30F3;&amp;#x3067;&amp;#x3001;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30DE;&amp;#x304C;&amp;#x6CE8;&amp;#x610F;&amp;#x3092;&amp;#x3057;&amp;#x3066;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x3092;1&amp;#x500B;&amp;#x3057;&amp;#x304B;&amp;#x4F5C;&amp;#x308C;&amp;#x306A;&amp;#x3044;&amp;#x3067;&amp;#x306F;&amp;#x306A;&amp;#x304F;&amp;#x3001;&amp;#x305D;&amp;#x308C;&amp;#x3092;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30E0;&amp;#x4E0A;&amp;#x3067;&amp;#x8868;&amp;#x73FE;&amp;#x3059;&amp;#x308B;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x610F;&amp;#x5473;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • #5: &amp;#x30D1;&amp;#x30BF;&amp;#x30FC;&amp;#x30F3;&amp;#x3092;&amp;#x5229;&amp;#x7528;&amp;#x3057;&amp;#x306A;&amp;#x3044;&amp;#x3067;&amp;#x81EA;&amp;#x7531;&amp;#x306B;new&amp;#x3055;&amp;#x305B;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x5834;&amp;#x5408;&amp;#x306F;&amp;#x3001;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x6570;&amp;#x3092;&amp;#x5236;&amp;#x5FA1;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002;&amp;#x3053;&amp;#x308C;&amp;#x306F;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30DE;&amp;#x304C;&amp;#x9811;&amp;#x5F35;&amp;#x3063;&amp;#x3066;&amp;#x5236;&amp;#x5FA1;&amp;#x3059;&amp;#x308B;&amp;#x306E;&amp;#x3067;&amp;#x306F;&amp;#x306A;&amp;#x304F;&amp;#x3001;&amp;#x3069;&amp;#x306E;&amp;#x3088;&amp;#x3046;&amp;#x306B;&amp;#x3057;&amp;#x3066;&amp;#x3082;1&amp;#x3064;&amp;#x3060;&amp;#x3051;&amp;#x306B;&amp;#x3059;&amp;#x308B;&amp;#x4ED5;&amp;#x7D44;&amp;#x307F;&amp;#x3092;&amp;#x63D0;&amp;#x4F9B;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x304C;&amp;#x76EE;&amp;#x7684;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • #6: &amp;#x4F8B;&amp;#x3048;&amp;#x3070;&amp;#x3001;&amp;#x30AD;&amp;#x30E3;&amp;#x30C3;&amp;#x30B7;&amp;#x30E5;&amp;#x306E;&amp;#x5834;&amp;#x5408;&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;\n&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x3092;&amp;#x5B9A;&amp;#x6570;&amp;#x5316;&amp;#x3057;&amp;#x3066;&amp;#x3001;&amp;#x30B3;&amp;#x30F3;&amp;#x30B9;&amp;#x30C8;&amp;#x30E9;&amp;#x30AF;&amp;#x30BF;&amp;#x3092;private&amp;#x306B;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x306F;&amp;#x30A4;&amp;#x30FC;&amp;#x30AC;&amp;#x30FC;&amp;#x306B;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x5178;&amp;#x578B;&amp;#x7684;&amp;#x306B;&amp;#x306F;&amp;#x3053;&amp;#x308C;&amp;#x3067;&amp;#x5341;&amp;#x5206;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x5B9A;&amp;#x6570;&amp;#x306F;&amp;#x3069;&amp;#x3053;&amp;#x3067;&amp;#x3082;\n
  • #7: &amp;#x6B21;&amp;#x306F;&amp;#x3001;getInstance&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x30D5;&amp;#x30A1;&amp;#x30AF;&amp;#x30C8;&amp;#x30EA;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x3092;&amp;#x7528;&amp;#x610F;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\nJVM&amp;#x306E;&amp;#x6700;&amp;#x9069;&amp;#x5316;&amp;#x3092;&amp;#x8003;&amp;#x3048;&amp;#x308C;&amp;#x3070;&amp;#x305D;&amp;#x308C;&amp;#x307B;&amp;#x3069;&amp;#x795E;&amp;#x7D4C;&amp;#x8CEA;&amp;#x306B;&amp;#x306A;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x3067;&amp;#x306F;&amp;#x306A;&amp;#x3044;&amp;#x3068;&amp;#x601D;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x3053;&amp;#x306E;&amp;#x5834;&amp;#x5408;&amp;#x306E;&amp;#x30E1;&amp;#x30EA;&amp;#x30C3;&amp;#x30C8;&amp;#x306F;&amp;#x3001;API&amp;#x306B;&amp;#x3088;&amp;#x3063;&amp;#x3066;&amp;#x5185;&amp;#x90E8;&amp;#x5B9F;&amp;#x88C5;&amp;#x3092;&amp;#x96A0;&amp;#x853D;&amp;#x3067;&amp;#x304D;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;\n\n
  • #8: &amp;#xFF1C;&amp;#xFF1C;&amp;#x3082;&amp;#x3046;&amp;#x3072;&amp;#x3068;&amp;#x3064;&amp;#x306E;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x3092;&amp;#x4ECB;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x306B;&amp;#x3088;&amp;#x308B;&amp;#x30E1;&amp;#x30EA;&amp;#x30C3;&amp;#x30C8;&amp;#xFF1E;&amp;#xFF1E;\n&amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30C8;&amp;#x30F3;&amp;#x306F;&amp;#x300C;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x306E;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x304C;1&amp;#x3064;&amp;#x3057;&amp;#x304B;&amp;#x751F;&amp;#x6210;&amp;#x3055;&amp;#x308C;&amp;#x306A;&amp;#x3044;&amp;#x300D;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x610F;&amp;#x5473;&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x3001;\n&amp;#x305D;&amp;#x306E;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x306E;&amp;#x30B3;&amp;#x30F3;&amp;#x30C6;&amp;#x30AD;&amp;#x30B9;&amp;#x30C8;\n&amp;#x3042;&amp;#x308B;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x306E;&amp;#x300C;&amp;#x7279;&amp;#x5B9A;&amp;#x306E;&amp;#x300D;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x304C;1&amp;#x3064;&amp;#x3057;&amp;#x304B;&amp;#x751F;&amp;#x6210;&amp;#x3055;&amp;#x308C;&amp;#x306A;&amp;#x3044;&amp;#x3001;&amp;#x89E3;&amp;#x91C8;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x304C;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x30FB;&amp;#x305F;&amp;#x3068;&amp;#x3048;&amp;#x3070;&amp;#x3001;&amp;#x9045;&amp;#x5EF6;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x3084;&amp;#x3001;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x3092;&amp;#x30B9;&amp;#x30EC;&amp;#x30C3;&amp;#x30C9;&amp;#x6BCE;&amp;#x306B;&amp;#x4F5C;&amp;#x308B;&amp;#x306A;&amp;#x3069;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n&amp;#x30FB;&amp;#x3053;&amp;#x306E;&amp;#x4F8B;&amp;#x3067;&amp;#x306F;&amp;#x3001; getInstance&amp;#x3092;&amp;#x547C;&amp;#x3073;&amp;#x51FA;&amp;#x3057;&amp;#x305F;&amp;#x30B9;&amp;#x30EC;&amp;#x30C3;&amp;#x30C9;&amp;#x3054;&amp;#x3068;&amp;#x306B;&amp;#x552F;&amp;#x4E00;&amp;#x306E;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x3092;&amp;#x8FD4;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x3002;\n&amp;#x3000;&amp;#x30FB;&amp;#x5185;&amp;#x90E8;&amp;#x306E;&amp;#x5B9F;&amp;#x88C5;&amp;#x3067;&amp;#x306F;ThreadLocal&amp;#x3092;&amp;#x30B5;&amp;#x30D6;&amp;#x30AF;&amp;#x30E9;&amp;#x30C3;&amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x3057;&amp;#x3066;&amp;#x3001;initValue&amp;#x3067;&amp;#x521D;&amp;#x671F;&amp;#x5024;&amp;#x3092;&amp;#x8FD4;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x3053;&amp;#x306E;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x306F;get&amp;#x304C;&amp;#x30C8;&amp;#x30EA;&amp;#x30AC;&amp;#x30FC;&amp;#x3068;&amp;#x306A;&amp;#x308B;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x5B9F;&amp;#x8CEA;&amp;#x9045;&amp;#x5EF6;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x306E;&amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30C8;&amp;#x30F3;&amp;#x306B;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • #9: &amp;#x30C6;&amp;#x30B9;&amp;#x30C8;&amp;#x5BFE;&amp;#x8C61;&amp;#x304C;&amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30C8;&amp;#x30F3;&amp;#x3068;&amp;#x4F9D;&amp;#x5B58;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x5834;&amp;#x5408;&amp;#x306F;&amp;#x3001;&amp;#x30C6;&amp;#x30B9;&amp;#x30C8;&amp;#x304C;&amp;#x5384;&amp;#x4ECB;&amp;#x306B;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;\nCache&amp;#x306E;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x3092;&amp;#x30E2;&amp;#x30C3;&amp;#x30AF;&amp;#x5B9F;&amp;#x88C5;&amp;#x306B;&amp;#x7F6E;&amp;#x304D;&amp;#x63DB;&amp;#x3048;&amp;#x305F;&amp;#x3044;&amp;#x3068;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x3057;&amp;#x304B;&amp;#x3057;&amp;#x3001;private&amp;#x30B3;&amp;#x30F3;&amp;#x30B9;&amp;#x30C8;&amp;#x30E9;&amp;#x30AF;&amp;#x30BF;&amp;#x3060;&amp;#x3068;&amp;#x30B5;&amp;#x30D6;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x5316;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002;&amp;#x30B3;&amp;#x30F3;&amp;#x30B9;&amp;#x30C8;&amp;#x30E9;&amp;#x30AF;&amp;#x30BF;&amp;#x3092;protected&amp;#x306B;&amp;#x3059;&amp;#x308B;&amp;#x5834;&amp;#x5408;&amp;#x306F;&amp;#x30B5;&amp;#x30D6;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x5316;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x305D;&amp;#x308C;&amp;#x3060;&amp;#x3051;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x3092;&amp;#x5236;&amp;#x9650;&amp;#x3067;&amp;#x304D;&amp;#x306A;&amp;#x3044;&amp;#x30EA;&amp;#x30B9;&amp;#x30AF;&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x30C8;&amp;#x30EC;&amp;#x30FC;&amp;#x30C9;&amp;#x30AA;&amp;#x30D5;&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;\n&amp;#x3082;&amp;#x3046;&amp;#x4E00;&amp;#x3064;&amp;#x65B9;&amp;#x6CD5;&amp;#x306F;&amp;#x3001;Cache&amp;#x306E;&amp;#x632F;&amp;#x308B;&amp;#x821E;&amp;#x3044;&amp;#x3092;&amp;#x30A4;&amp;#x30F3;&amp;#x30BF;&amp;#x30FC;&amp;#x30D5;&amp;#x30A7;&amp;#x30A4;&amp;#x30B9;&amp;#x3092;&amp;#x5B9A;&amp;#x7FA9;&amp;#x3057;&amp;#x3001;&amp;#x305D;&amp;#x308C;&amp;#x306E;&amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30C8;&amp;#x30F3;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x5B9F;&amp;#x88C5;&amp;#x3068;&amp;#x3001;&amp;#x30E2;&amp;#x30C3;&amp;#x30AF;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x306E;&amp;#x5B9F;&amp;#x88C5;&amp;#x3092;&amp;#x30C6;&amp;#x30B9;&amp;#x30C8;&amp;#x306E;&amp;#x3068;&amp;#x304D;&amp;#x306B;&amp;#x4F7F;&amp;#x3044;&amp;#x5206;&amp;#x3051;&amp;#x308B;&amp;#x65B9;&amp;#x6CD5;&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • #10: &amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30C8;&amp;#x30F3;&amp;#x306B;&amp;#x3082;&amp;#x30A4;&amp;#x30F3;&amp;#x30BF;&amp;#x30FC;&amp;#x30D5;&amp;#x30A7;&amp;#x30A4;&amp;#x30B9;&amp;#x3092;&amp;#x7528;&amp;#x610F;&amp;#x3059;&amp;#x308C;&amp;#x3070;&amp;#x3001;&amp;#x30AF;&amp;#x30E9;&amp;#x30A4;&amp;#x30A2;&amp;#x30F3;&amp;#x30C8;&amp;#x306B;&amp;#x5BFE;&amp;#x3057;&amp;#x3066;JMock&amp;#x3068;&amp;#x304B;&amp;#x3067;&amp;#x30E2;&amp;#x30C3;&amp;#x30AF;&amp;#x5316;&amp;#x3059;&amp;#x308B;&amp;#x306A;&amp;#x308A;&amp;#x3001;&amp;#x30C0;&amp;#x30DF;&amp;#x30FC;&amp;#x306E;&amp;#x30E2;&amp;#x30C3;&amp;#x30AF;&amp;#x5B9F;&amp;#x88C5;&amp;#x3092;&amp;#x4F5C;&amp;#x308A;&amp;#x306A;&amp;#x308A;&amp;#x304C;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x3053;&amp;#x308C;&amp;#x3067;&amp;#x3082;&amp;#x3001;Cache&amp;#x578B;&amp;#x3092;&amp;#x4F7F;&amp;#x3046;&amp;#x9650;&amp;#x308A;&amp;#x7F6E;&amp;#x3044;&amp;#x3066;&amp;#x306F;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x306E;&amp;#x6570;&amp;#x306E;&amp;#x7BA1;&amp;#x7406;&amp;#x304C;&amp;#x7D50;&amp;#x69CB;&amp;#x96E3;&amp;#x3057;&amp;#x3044;&amp;#x5370;&amp;#x8C61;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • #11: &amp;#x6271;&amp;#x3044;&amp;#x65B9;&amp;#x6B21;&amp;#x7B2C;&amp;#x3067;&amp;#x30B0;&amp;#x30ED;&amp;#x30FC;&amp;#x30D0;&amp;#x30EB;&amp;#x5909;&amp;#x6570;&amp;#x306B;&amp;#x306A;&amp;#x3063;&amp;#x3066;&amp;#x3057;&amp;#x307E;&amp;#x3046;&amp;#x3002;\n&amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30C8;&amp;#x30F3;&amp;#x306F;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x306E;&amp;#x4E2D;&amp;#x306E;&amp;#x3069;&amp;#x3053;&amp;#x304B;&amp;#x3089;&amp;#x3067;&amp;#x3082;&amp;#x540C;&amp;#x4E00;&amp;#x306E;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x306B;&amp;#x30A2;&amp;#x30AF;&amp;#x30BB;&amp;#x30B9;&amp;#x3067;&amp;#x304D;&amp;#x308B;&amp;#x304B;&amp;#x3089;&amp;#x3002;\n\n\n
  • #12: readObject&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x306F;&amp;#x65B0;&amp;#x305F;&amp;#x306B;&amp;#x751F;&amp;#x6210;&amp;#x3055;&amp;#x308C;&amp;#x305F;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3092;&amp;#x8FD4;&amp;#x3059;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x30C7;&amp;#x30B7;&amp;#x30EA;&amp;#x30A2;&amp;#x30E9;&amp;#x30A4;&amp;#x30BA;&amp;#x3059;&amp;#x308B;&amp;#x3068;&amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30C8;&amp;#x30F3;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x7834;&amp;#x7DBB;&amp;#x3059;&amp;#x308B;&amp;#x3093;&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;\n
  • #13: Java5&amp;#x4EE5;&amp;#x964D;&amp;#x3067;&amp;#x3042;&amp;#x308C;&amp;#x3070;&amp;#x3001;enum&amp;#x306B;&amp;#x4F7F;&amp;#x3048;&amp;#x3070;&amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30C8;&amp;#x30F3;&amp;#x306B;&amp;#x3067;&amp;#x304D;&amp;#x3066;&amp;#x3001;&amp;#x5148;&amp;#x307B;&amp;#x3069;&amp;#x306E;&amp;#x30B7;&amp;#x30EA;&amp;#x30A2;&amp;#x30E9;&amp;#x30A4;&amp;#x30BA;&amp;#x304C;&amp;#x7D61;&amp;#x3093;&amp;#x3067;&amp;#x3082;&amp;#x552F;&amp;#x4E00;&amp;#x7121;&amp;#x4E8C;&amp;#x306E;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x304C;&amp;#x4FDD;&amp;#x8A3C;&amp;#x3055;&amp;#x308C;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x30B7;&amp;#x30EA;&amp;#x30A2;&amp;#x30E9;&amp;#x30A4;&amp;#x30BA;&amp;#x3092;&amp;#x5FF5;&amp;#x982D;&amp;#x306B;&amp;#x7F6E;&amp;#x304F;&amp;#x306A;&amp;#x3089;enum&amp;#x304C;&amp;#x4E00;&amp;#x756A;&amp;#x5B89;&amp;#x5168;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x5BA3;&amp;#x8A00;&amp;#x3055;&amp;#x308C;&amp;#x305F;&amp;#x5B9A;&amp;#x6570;&amp;#x4EE5;&amp;#x5916;&amp;#x306B;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x304C;&amp;#x306A;&amp;#x3044;&amp;#x3053;&amp;#x3068;&amp;#x3092;JVM&amp;#x304C;&amp;#x4FDD;&amp;#x8A3C;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\nEffiective Java &amp;#x7B2C;&amp;#x4E8C;&amp;#x7248; &amp;#x9805;&amp;#x76EE;77 &amp;#x300C;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x5236;&amp;#x5FA1;&amp;#x306B;&amp;#x5BFE;&amp;#x3057;&amp;#x3066;&amp;#x306F;readResolve&amp;#x3088;&amp;#x308A;enum&amp;#x578B;&amp;#x3092;&amp;#x9078;&amp;#x3076;&amp;#x300D;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • #14: &amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30C8;&amp;#x30F3;&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;Enum&amp;#x306F;Serializable&amp;#x3092;&amp;#x5B9F;&amp;#x88C5;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x3066;\n
  • #15: \n
  • #16: &amp;#x9045;&amp;#x5EF6;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x3059;&amp;#x308B;&amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30C8;&amp;#x30F3;&amp;#x306E;&amp;#x5178;&amp;#x578B;&amp;#x7684;&amp;#x306A;&amp;#x4F8B;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x6700;&amp;#x521D;&amp;#x306E;getInstance&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x306E;&amp;#x547C;&amp;#x3073;&amp;#x51FA;&amp;#x3057;&amp;#x3067;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x3055;&amp;#x308C;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x8907;&amp;#x6570;&amp;#x30B9;&amp;#x30EC;&amp;#x30C3;&amp;#x30C9;&amp;#x3067;&amp;#x3053;&amp;#x306E;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x3092;&amp;#x547C;&amp;#x3073;&amp;#x51FA;&amp;#x3057;&amp;#x305F;&amp;#x969B;&amp;#x306B;&amp;#x3001;&amp;#x8907;&amp;#x6570;&amp;#x56DE;&amp;#x306E;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x304C;&amp;#x884C;&amp;#x308F;&amp;#x308C;&amp;#x308B;&amp;#x306E;&amp;#x3092;&amp;#x9632;&amp;#x3050;&amp;#x305F;&amp;#x3081;&amp;#x3068;&amp;#x3001;&amp;#x4ED6;&amp;#x306E;&amp;#x30B9;&amp;#x30EC;&amp;#x30C3;&amp;#x30C9;&amp;#x306B;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x6E08;&amp;#x307F;&amp;#x3067;&amp;#x3042;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x3092;&amp;#x4F1D;&amp;#x3048;&amp;#x308B;&amp;#x305F;&amp;#x3081;&amp;#x306B;&amp;#x3001;&amp;#x56FA;&amp;#x6709;&amp;#x30ED;&amp;#x30C3;&amp;#x30AF;&amp;#x3092;&amp;#x304B;&amp;#x3051;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • #17: &amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30BF;&amp;#x30F3;&amp;#x30B9;&amp;#x306E;&amp;#x30D5;&amp;#x30A3;&amp;#x30FC;&amp;#x30EB;&amp;#x30C9;&amp;#x3092;&amp;#x5185;&amp;#x90E8;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x306B;&amp;#x6301;&amp;#x3064;&amp;#x30D1;&amp;#x30BF;&amp;#x30FC;&amp;#x30F3;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n&amp;#x9045;&amp;#x5EF6;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x30DB;&amp;#x30EB;&amp;#x30C0;&amp;#x30FC;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x30A4;&amp;#x30C7;&amp;#x30AA;&amp;#x30E0;&amp;#x3068;&amp;#x304B;&amp;#x3044;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\ngetInstance&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x304C;&amp;#x521D;&amp;#x3081;&amp;#x3066;&amp;#x547C;&amp;#x3073;&amp;#x51FA;&amp;#x3055;&amp;#x308C;&amp;#x305F;&amp;#x6642;&amp;#x306B;&amp;#x3001;&amp;#x521D;&amp;#x3081;&amp;#x3066;InstanceHolder.INSTANCE&amp;#x3092;&amp;#x8AAD;&amp;#x307F;&amp;#x51FA;&amp;#x3057;&amp;#x3001;&amp;#x305D;&amp;#x308C;&amp;#x306B;&amp;#x3088;&amp;#x308A;InstanceHolder&amp;#x304C;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x3055;&amp;#x308C;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x3053;&amp;#x306E;&amp;#x30A4;&amp;#x30C7;&amp;#x30AA;&amp;#x30E0;&amp;#x306E;&amp;#x7F8E;&amp;#x3057;&amp;#x3055;&amp;#x306F;&amp;#x3001;getInstance&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x306F;&amp;#x540C;&amp;#x671F;&amp;#x3055;&amp;#x308C;&amp;#x3066;&amp;#x304A;&amp;#x3089;&amp;#x305A;&amp;#x3001;&amp;#x30D5;&amp;#x30A3;&amp;#x30FC;&amp;#x30EB;&amp;#x30C9;&amp;#x30A2;&amp;#x30AF;&amp;#x30BB;&amp;#x30B9;&amp;#x3060;&amp;#x3051;&amp;#x3092;&amp;#x884C;&amp;#x3046;&amp;#x3053;&amp;#x3068;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x3057;&amp;#x305F;&amp;#x304C;&amp;#x3063;&amp;#x3066;&amp;#x3001;&amp;#x9045;&amp;#x5EF6;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x3067;&amp;#x306F;&amp;#x30A2;&amp;#x30AF;&amp;#x30BB;&amp;#x30B9;&amp;#x306E;&amp;#x30B3;&amp;#x30B9;&amp;#x30C8;&amp;#x304C;&amp;#x5B9F;&amp;#x8CEA;&amp;#x7684;&amp;#x306B;&amp;#x5897;&amp;#x3048;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002;\n&amp;#x6700;&amp;#x65B0;&amp;#x306E;JVM&amp;#x306F;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x3092;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x3059;&amp;#x308B;&amp;#x305F;&amp;#x3081;&amp;#x3060;&amp;#x3051;&amp;#x306B;&amp;#x30D5;&amp;#x30A3;&amp;#x30FC;&amp;#x30EB;&amp;#x30C9;&amp;#x3078;&amp;#x306E;&amp;#x30A2;&amp;#x30AF;&amp;#x30BB;&amp;#x30B9;&amp;#x3092;&amp;#x540C;&amp;#x671F;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x4E00;&amp;#x65E6;&amp;#x3001;&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x304C;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x3055;&amp;#x308C;&amp;#x308C;&amp;#x3070;&amp;#x3001;&amp;#x305D;&amp;#x306E;&amp;#x5F8C;&amp;#x306E;&amp;#x30D5;&amp;#x30A3;&amp;#x30FC;&amp;#x30EB;&amp;#x30C9;&amp;#x3078;&amp;#x306E;&amp;#x30A2;&amp;#x30AF;&amp;#x30BB;&amp;#x30B9;&amp;#x306B;&amp;#x4F55;&amp;#x3089;&amp;#x304B;&amp;#x306E;&amp;#x691C;&amp;#x67FB;&amp;#x3084;&amp;#x540C;&amp;#x671F;&amp;#x304C;&amp;#x304B;&amp;#x304B;&amp;#x308F;&amp;#x3089;&amp;#x306A;&amp;#x3044;&amp;#x3088;&amp;#x3046;&amp;#x306B;&amp;#x3001;JVM&amp;#x306F;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x3092;&amp;#x4FEE;&amp;#x6B63;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n\n
  • #18: &amp;#x3053;&amp;#x308C;&amp;#x306F;&amp;#x3053;&amp;#x3053;&amp;#x3067;&amp;#x5168;&amp;#x90E8;&amp;#x8A71;&amp;#x305B;&amp;#x308B;&amp;#x5185;&amp;#x5BB9;&amp;#x3067;&amp;#x306A;&amp;#x3044;&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x30C0;&amp;#x30D6;&amp;#x30EB;&amp;#x30C1;&amp;#x30A7;&amp;#x30C3;&amp;#x30AD;&amp;#x30F3;&amp;#x30B0;&amp;#x30ED;&amp;#x30B8;&amp;#x30C3;&amp;#x30AF;&amp;#x306E;&amp;#x30D1;&amp;#x30BF;&amp;#x30FC;&amp;#x30F3;&amp;#x3067;&amp;#x3059;&amp;#x3002;Java1.4&amp;#x3067;&amp;#x306F;&amp;#x6B63;&amp;#x3057;&amp;#x304F;&amp;#x52D5;&amp;#x304D;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002;1.5&amp;#x4EE5;&amp;#x964D;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x56FA;&amp;#x6709;&amp;#x30ED;&amp;#x30C3;&amp;#x30AF;&amp;#x306B;&amp;#x3088;&amp;#x308B;&amp;#x30ED;&amp;#x30C3;&amp;#x30AF;&amp;#x306E;&amp;#x30B3;&amp;#x30B9;&amp;#x30C8;&amp;#x3092;&amp;#x6E1B;&amp;#x3089;&amp;#x3059;&amp;#x306E;&amp;#x304C;&amp;#x76EE;&amp;#x7684;&amp;#x306A;&amp;#x306E;&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x306A;&amp;#x306B;&amp;#x3076;&amp;#x3093;&amp;#x3084;&amp;#x3084;&amp;#x3053;&amp;#x3057;&amp;#x3044;&amp;#x3002;&amp;#x3053;&amp;#x3046;&amp;#x3044;&amp;#x3046;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x306F;&amp;#x66F8;&amp;#x304F;&amp;#x3079;&amp;#x304D;&amp;#x3067;&amp;#x306A;&amp;#x3044;&amp;#x3068;&amp;#x601D;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n(1)&amp;#x3067;&amp;#x30E1;&amp;#x30A4;&amp;#x30F3;&amp;#x30E1;&amp;#x30E2;&amp;#x30EA;&amp;#x304B;&amp;#x3089;&amp;#x6700;&amp;#x65B0;&amp;#x306E;&amp;#x5024;&amp;#x3092;&amp;#x53D6;&amp;#x5F97;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n(2)&amp;#x3067;&amp;#x306F;valotile&amp;#x30D5;&amp;#x30A3;&amp;#x30FC;&amp;#x30EB;&amp;#x30C9;&amp;#x3092;&amp;#x30C1;&amp;#x30A7;&amp;#x30C3;&amp;#x30AF;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x306E;&amp;#x3067;(3)&amp;#x3067;&amp;#x56FA;&amp;#x6709;&amp;#x30ED;&amp;#x30C3;&amp;#x30AF;&amp;#x3088;&amp;#x308A;&amp;#x30B3;&amp;#x30B9;&amp;#x30C8;&amp;#x304C;&amp;#x4E0B;&amp;#x3055;&amp;#x3052;&amp;#x307E;&amp;#x3059;&amp;#x3002;null&amp;#x306E;&amp;#x5834;&amp;#x5408;&amp;#x306F;(3)&amp;#x3067;&amp;#x56FA;&amp;#x6709;&amp;#x30ED;&amp;#x30C3;&amp;#x30AF;&amp;#x3067;&amp;#x30ED;&amp;#x30C3;&amp;#x30AF;&amp;#x3092;&amp;#x7372;&amp;#x5F97;&amp;#x3002;\n(3)&amp;#x30ED;&amp;#x30C3;&amp;#x30AF;&amp;#x7372;&amp;#x5F97;&amp;#x5F8C;&amp;#x306F;&amp;#x4ED6;&amp;#x306E;&amp;#x30B9;&amp;#x30EC;&amp;#x30C3;&amp;#x30C9;&amp;#x3067;&amp;#x30A2;&amp;#x30F3;&amp;#x30ED;&amp;#x30C3;&amp;#x30AF;&amp;#x524D;&amp;#x306B;&amp;#x767A;&amp;#x751F;&amp;#x3057;&amp;#x305F;&amp;#x5909;&amp;#x66F4;&amp;#x304C;&amp;#x3001;&amp;#x4E8B;&amp;#x524D;&amp;#x767A;&amp;#x751F;(happens-before)&amp;#x306E;&amp;#x4ED5;&amp;#x69D8;&amp;#x3067;&amp;#x6700;&amp;#x65B0;&amp;#x306E;instance&amp;#x304C;&amp;#x898B;&amp;#x3048;&amp;#x308B;&amp;#x3088;&amp;#x3046;&amp;#x306B;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x4ED6;&amp;#x306E;&amp;#x30B9;&amp;#x30EC;&amp;#x30C3;&amp;#x30C9;&amp;#x306B;&amp;#x3088;&amp;#x3063;&amp;#x3066;&amp;#x3001;&amp;#x3059;&amp;#x3067;&amp;#x306B;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x6E08;&amp;#x307F;&amp;#x3067;&amp;#x3042;&amp;#x308C;&amp;#x3070;&amp;#x3001;&amp;#x30ED;&amp;#x30C3;&amp;#x30AF;&amp;#x3092;&amp;#x89E3;&amp;#x653E;&amp;#x3057;&amp;#x3066;instance&amp;#x3092;&amp;#x8FD4;&amp;#x3059;&amp;#x3002;&amp;#x672A;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x306A;&amp;#x3089;&amp;#x521D;&amp;#x671F;&amp;#x5316;&amp;#x3057;&amp;#x3066;instance&amp;#x3092;&amp;#x8FD4;&amp;#x3059;&amp;#x3002;&amp;#x56FA;&amp;#x6709;&amp;#x30ED;&amp;#x30C3;&amp;#x30AF;&amp;#x3092;&amp;#x629C;&amp;#x3051;&amp;#x308B;&amp;#x3068;&amp;#x304D;&amp;#x306B;&amp;#x3053;&amp;#x306E;&amp;#x5909;&amp;#x66F4;&amp;#x306F;&amp;#x30E1;&amp;#x30A4;&amp;#x30F3;&amp;#x30E1;&amp;#x30E2;&amp;#x30EA;&amp;#x306B;&amp;#x4F1D;&amp;#x308F;&amp;#x308A;&amp;#x3001;&amp;#x4ED6;&amp;#x306E;&amp;#x30B9;&amp;#x30EC;&amp;#x30C3;&amp;#x30C9;&amp;#x304B;&amp;#x3089;&amp;#x898B;&amp;#x3048;&amp;#x308B;&amp;#x3088;&amp;#x3046;&amp;#x306B;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x30FB;&amp;#x3053;&amp;#x3046;&amp;#x3044;&amp;#x3046;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x306F;&amp;#x7406;&amp;#x89E3;&amp;#x304C;&amp;#x96E3;&amp;#x3057;&amp;#x3044;\n&amp;#x30FB;&amp;#x30E1;&amp;#x30E2;&amp;#x30EA;&amp;#x30E2;&amp;#x30C7;&amp;#x30EB;&amp;#x306B;&amp;#x95A2;&amp;#x4FC2;&amp;#x3059;&amp;#x308B;&amp;#x306E;&amp;#x3067;&amp;#x5384;&amp;#x4ECB;&amp;#x3002;&amp;#x3067;&amp;#x304D;&amp;#x308B;&amp;#x3060;&amp;#x3051;&amp;#x56DE;&amp;#x907F;&amp;#x3057;&amp;#x305F;&amp;#x307B;&amp;#x3046;&amp;#x304C;&amp;#x3044;&amp;#x3044;&amp;#x3068;&amp;#x601D;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • #19: \n
  • #20: \n
  • #21: Eager&amp;#x306A;&amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30C8;&amp;#x30F3;&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;\n