SlideShare une entreprise Scribd logo
1  sur  20
(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 ...
}
(´    ∀      )
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)

Contenu connexe

Tendances

«Objective-C Runtime в примерах» — Алексей Сторожев, e-Legion
«Objective-C Runtime в примерах» — Алексей Сторожев, e-Legion«Objective-C Runtime в примерах» — Алексей Сторожев, e-Legion
«Objective-C Runtime в примерах» — Алексей Сторожев, e-Legione-Legion
 
JNI - Java & C in the same project
JNI - Java & C in the same projectJNI - Java & C in the same project
JNI - Java & C in the same projectKarol Wrótniak
 
Java Concurrency Gotchas
Java Concurrency GotchasJava Concurrency Gotchas
Java Concurrency GotchasAlex Miller
 
Hidden Treasures of the Python Standard Library
Hidden Treasures of the Python Standard LibraryHidden Treasures of the Python Standard Library
Hidden Treasures of the Python Standard Librarydoughellmann
 
Basic java, java collection Framework and Date Time API
Basic java, java collection Framework and Date Time APIBasic java, java collection Framework and Date Time API
Basic java, java collection Framework and Date Time APIjagriti srivastava
 
What’s new in C# 6
What’s new in C# 6What’s new in C# 6
What’s new in C# 6Fiyaz Hasan
 
C# Application program UNIT III
C# Application program UNIT IIIC# Application program UNIT III
C# Application program UNIT IIIMinu Rajasekaran
 
Java 7 Launch Event at LyonJUG, Lyon France. Fork / Join framework and Projec...
Java 7 Launch Event at LyonJUG, Lyon France. Fork / Join framework and Projec...Java 7 Launch Event at LyonJUG, Lyon France. Fork / Join framework and Projec...
Java 7 Launch Event at LyonJUG, Lyon France. Fork / Join framework and Projec...julien.ponge
 
Java 7 at SoftShake 2011
Java 7 at SoftShake 2011Java 7 at SoftShake 2011
Java 7 at SoftShake 2011julien.ponge
 
Java 7 JUG Summer Camp
Java 7 JUG Summer CampJava 7 JUG Summer Camp
Java 7 JUG Summer Campjulien.ponge
 
soft-shake.ch - Java SE 7: The Fork/Join Framework and Project Coin
soft-shake.ch - Java SE 7: The Fork/Join Framework and Project Coinsoft-shake.ch - Java SE 7: The Fork/Join Framework and Project Coin
soft-shake.ch - Java SE 7: The Fork/Join Framework and Project Coinsoft-shake.ch
 
Software Testing - Invited Lecture at UNSW Sydney
Software Testing - Invited Lecture at UNSW SydneySoftware Testing - Invited Lecture at UNSW Sydney
Software Testing - Invited Lecture at UNSW Sydneyjulien.ponge
 
JCConf 2015 - 輕鬆學google的雲端開發 - Google App Engine入門(上)
JCConf 2015  - 輕鬆學google的雲端開發 - Google App Engine入門(上)JCConf 2015  - 輕鬆學google的雲端開發 - Google App Engine入門(上)
JCConf 2015 - 輕鬆學google的雲端開發 - Google App Engine入門(上)Simon Su
 
ikh331-06-distributed-programming
ikh331-06-distributed-programmingikh331-06-distributed-programming
ikh331-06-distributed-programmingAnung Ariwibowo
 
The uniform interface is 42
The uniform interface is 42The uniform interface is 42
The uniform interface is 42Yevhen Bobrov
 

Tendances (20)

#JavaFX.forReal() - ElsassJUG
#JavaFX.forReal() - ElsassJUG#JavaFX.forReal() - ElsassJUG
#JavaFX.forReal() - ElsassJUG
 
Java Programming - 06 java file io
Java Programming - 06 java file ioJava Programming - 06 java file io
Java Programming - 06 java file io
 
«Objective-C Runtime в примерах» — Алексей Сторожев, e-Legion
«Objective-C Runtime в примерах» — Алексей Сторожев, e-Legion«Objective-C Runtime в примерах» — Алексей Сторожев, e-Legion
«Objective-C Runtime в примерах» — Алексей Сторожев, e-Legion
 
JNI - Java & C in the same project
JNI - Java & C in the same projectJNI - Java & C in the same project
JNI - Java & C in the same project
 
Java Concurrency Gotchas
Java Concurrency GotchasJava Concurrency Gotchas
Java Concurrency Gotchas
 
Hidden Treasures of the Python Standard Library
Hidden Treasures of the Python Standard LibraryHidden Treasures of the Python Standard Library
Hidden Treasures of the Python Standard Library
 
Basic java, java collection Framework and Date Time API
Basic java, java collection Framework and Date Time APIBasic java, java collection Framework and Date Time API
Basic java, java collection Framework and Date Time API
 
What’s new in C# 6
What’s new in C# 6What’s new in C# 6
What’s new in C# 6
 
Nantes Jug - Java 7
Nantes Jug - Java 7Nantes Jug - Java 7
Nantes Jug - Java 7
 
C# Application program UNIT III
C# Application program UNIT IIIC# Application program UNIT III
C# Application program UNIT III
 
Java 7 Launch Event at LyonJUG, Lyon France. Fork / Join framework and Projec...
Java 7 Launch Event at LyonJUG, Lyon France. Fork / Join framework and Projec...Java 7 Launch Event at LyonJUG, Lyon France. Fork / Join framework and Projec...
Java 7 Launch Event at LyonJUG, Lyon France. Fork / Join framework and Projec...
 
Java 7 LavaJUG
Java 7 LavaJUGJava 7 LavaJUG
Java 7 LavaJUG
 
In kor we Trust
In kor we TrustIn kor we Trust
In kor we Trust
 
Java 7 at SoftShake 2011
Java 7 at SoftShake 2011Java 7 at SoftShake 2011
Java 7 at SoftShake 2011
 
Java 7 JUG Summer Camp
Java 7 JUG Summer CampJava 7 JUG Summer Camp
Java 7 JUG Summer Camp
 
soft-shake.ch - Java SE 7: The Fork/Join Framework and Project Coin
soft-shake.ch - Java SE 7: The Fork/Join Framework and Project Coinsoft-shake.ch - Java SE 7: The Fork/Join Framework and Project Coin
soft-shake.ch - Java SE 7: The Fork/Join Framework and Project Coin
 
Software Testing - Invited Lecture at UNSW Sydney
Software Testing - Invited Lecture at UNSW SydneySoftware Testing - Invited Lecture at UNSW Sydney
Software Testing - Invited Lecture at UNSW Sydney
 
JCConf 2015 - 輕鬆學google的雲端開發 - Google App Engine入門(上)
JCConf 2015  - 輕鬆學google的雲端開發 - Google App Engine入門(上)JCConf 2015  - 輕鬆學google的雲端開發 - Google App Engine入門(上)
JCConf 2015 - 輕鬆學google的雲端開發 - Google App Engine入門(上)
 
ikh331-06-distributed-programming
ikh331-06-distributed-programmingikh331-06-distributed-programming
ikh331-06-distributed-programming
 
The uniform interface is 42
The uniform interface is 42The uniform interface is 42
The uniform interface is 42
 

En vedette

第一回Scala会議
第一回Scala会議第一回Scala会議
第一回Scala会議潤一 加藤
 
コードで学ぶドメイン駆動設計入門
コードで学ぶドメイン駆動設計入門コードで学ぶドメイン駆動設計入門
コードで学ぶドメイン駆動設計入門潤一 加藤
 
Sbt職人のススメ
Sbt職人のススメSbt職人のススメ
Sbt職人のススメ潤一 加藤
 
Scala/Scrum/DDD 困ったこと50連発ガトリングトーク!!
Scala/Scrum/DDD 困ったこと50連発ガトリングトーク!!Scala/Scrum/DDD 困ったこと50連発ガトリングトーク!!
Scala/Scrum/DDD 困ったこと50連発ガトリングトーク!!Yasuyuki Sugitani
 
ドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイントドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイント増田 亨
 
DeNAの分析を支える分析基盤
DeNAの分析を支える分析基盤DeNAの分析を支える分析基盤
DeNAの分析を支える分析基盤Kenshin Yamada
 

En vedette (7)

第一回Scala会議
第一回Scala会議第一回Scala会議
第一回Scala会議
 
コードで学ぶドメイン駆動設計入門
コードで学ぶドメイン駆動設計入門コードで学ぶドメイン駆動設計入門
コードで学ぶドメイン駆動設計入門
 
Sbt職人のススメ
Sbt職人のススメSbt職人のススメ
Sbt職人のススメ
 
Scala with DDD
Scala with DDDScala with DDD
Scala with DDD
 
Scala/Scrum/DDD 困ったこと50連発ガトリングトーク!!
Scala/Scrum/DDD 困ったこと50連発ガトリングトーク!!Scala/Scrum/DDD 困ったこと50連発ガトリングトーク!!
Scala/Scrum/DDD 困ったこと50連発ガトリングトーク!!
 
ドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイントドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイント
 
DeNAの分析を支える分析基盤
DeNAの分析を支える分析基盤DeNAの分析を支える分析基盤
DeNAの分析を支える分析基盤
 

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

Java Concurrency Gotchas
Java Concurrency GotchasJava Concurrency Gotchas
Java Concurrency GotchasAlex Miller
 
Javaoneconcurrencygotchas 090610192215 Phpapp02
Javaoneconcurrencygotchas 090610192215 Phpapp02Javaoneconcurrencygotchas 090610192215 Phpapp02
Javaoneconcurrencygotchas 090610192215 Phpapp02Tarun Kumar
 
Java осень 2012 лекция 2
Java осень 2012 лекция 2Java осень 2012 лекция 2
Java осень 2012 лекция 2Technopark
 
Hey Kotlin, How it works?
Hey Kotlin, How it works?Hey Kotlin, How it works?
Hey Kotlin, How it works?Chang W. Doh
 
Kotlin, 어떻게 동작하나요
Kotlin, 어떻게 동작하나요Kotlin, 어떻게 동작하나요
Kotlin, 어떻게 동작하나요Chang W. Doh
 
Groovy Ast Transformations (greach)
Groovy Ast Transformations (greach)Groovy Ast Transformations (greach)
Groovy Ast Transformations (greach)HamletDRC
 
2020 Droid Knights CustomLint 적용기
2020 Droid Knights CustomLint 적용기2020 Droid Knights CustomLint 적용기
2020 Droid Knights CustomLint 적용기Insung Hwang
 
Nice to meet Kotlin
Nice to meet KotlinNice to meet Kotlin
Nice to meet KotlinJieyi Wu
 
A linked stack is implemented using a standard Node class as follows.pdf
A linked stack is implemented using a standard Node class as follows.pdfA linked stack is implemented using a standard Node class as follows.pdf
A linked stack is implemented using a standard Node class as follows.pdfkisgstin23
 
From Runnable and synchronized To atomically() and parallel()
From Runnable and synchronized To atomically() and parallel()From Runnable and synchronized To atomically() and parallel()
From Runnable and synchronized To atomically() and parallel()José Paumard
 
VISUALIZAR REGISTROS EN UN JTABLE
VISUALIZAR REGISTROS EN UN JTABLEVISUALIZAR REGISTROS EN UN JTABLE
VISUALIZAR REGISTROS EN UN JTABLEDarwin Durand
 
create a new interface called DropoutStackADT for representing a dro.pdf
create a new interface called DropoutStackADT for representing a dro.pdfcreate a new interface called DropoutStackADT for representing a dro.pdf
create a new interface called DropoutStackADT for representing a dro.pdff3apparelsonline
 
New folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docx
New folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docxNew folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docx
New folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docxcurwenmichaela
 
A topology of memory leaks on the JVM
A topology of memory leaks on the JVMA topology of memory leaks on the JVM
A topology of memory leaks on the JVMRafael Winterhalter
 
AST Transformations at JFokus
AST Transformations at JFokusAST Transformations at JFokus
AST Transformations at JFokusHamletDRC
 

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

Java Concurrency Gotchas
Java Concurrency GotchasJava Concurrency Gotchas
Java Concurrency Gotchas
 
Javaoneconcurrencygotchas 090610192215 Phpapp02
Javaoneconcurrencygotchas 090610192215 Phpapp02Javaoneconcurrencygotchas 090610192215 Phpapp02
Javaoneconcurrencygotchas 090610192215 Phpapp02
 
Concurrency gotchas
Concurrency gotchasConcurrency gotchas
Concurrency gotchas
 
Design in the small
Design in the smallDesign in the small
Design in the small
 
Java осень 2012 лекция 2
Java осень 2012 лекция 2Java осень 2012 лекция 2
Java осень 2012 лекция 2
 
Hey Kotlin, How it works?
Hey Kotlin, How it works?Hey Kotlin, How it works?
Hey Kotlin, How it works?
 
Kotlin, 어떻게 동작하나요
Kotlin, 어떻게 동작하나요Kotlin, 어떻게 동작하나요
Kotlin, 어떻게 동작하나요
 
Groovy Ast Transformations (greach)
Groovy Ast Transformations (greach)Groovy Ast Transformations (greach)
Groovy Ast Transformations (greach)
 
2020 Droid Knights CustomLint 적용기
2020 Droid Knights CustomLint 적용기2020 Droid Knights CustomLint 적용기
2020 Droid Knights CustomLint 적용기
 
Nice to meet Kotlin
Nice to meet KotlinNice to meet Kotlin
Nice to meet Kotlin
 
A linked stack is implemented using a standard Node class as follows.pdf
A linked stack is implemented using a standard Node class as follows.pdfA linked stack is implemented using a standard Node class as follows.pdf
A linked stack is implemented using a standard Node class as follows.pdf
 
From Runnable and synchronized To atomically() and parallel()
From Runnable and synchronized To atomically() and parallel()From Runnable and synchronized To atomically() and parallel()
From Runnable and synchronized To atomically() and parallel()
 
VISUALIZAR REGISTROS EN UN JTABLE
VISUALIZAR REGISTROS EN UN JTABLEVISUALIZAR REGISTROS EN UN JTABLE
VISUALIZAR REGISTROS EN UN JTABLE
 
Workshop Scala
Workshop ScalaWorkshop Scala
Workshop Scala
 
create a new interface called DropoutStackADT for representing a dro.pdf
create a new interface called DropoutStackADT for representing a dro.pdfcreate a new interface called DropoutStackADT for representing a dro.pdf
create a new interface called DropoutStackADT for representing a dro.pdf
 
Scala in practice
Scala in practiceScala in practice
Scala in practice
 
New folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docx
New folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docxNew folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docx
New folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docx
 
A topology of memory leaks on the JVM
A topology of memory leaks on the JVMA topology of memory leaks on the JVM
A topology of memory leaks on the JVM
 
OOP Lab Report.docx
OOP Lab Report.docxOOP Lab Report.docx
OOP Lab Report.docx
 
AST Transformations at JFokus
AST Transformations at JFokusAST Transformations at JFokus
AST Transformations at JFokus
 

Dernier

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfhans926745
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 

Dernier (20)

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 

第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 ... }
  • 14.
  • 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)

Notes de l'éditeur

  1. \n
  2. &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
  3. &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
  4. &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
  5. &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
  6. &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
  7. &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
  8. &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
  9. &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
  10. &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
  11. 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
  12. 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
  13. &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
  14. \n
  15. &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
  16. &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
  17. &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
  18. \n
  19. \n
  20. Eager&amp;#x306A;&amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30C8;&amp;#x30F3;&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;\n