SlideShare ist ein Scribd-Unternehmen logo
1 von 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)

Weitere ähnliche Inhalte

Was ist angesagt?

«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
 

Was ist angesagt? (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
 

Andere mochten auch

第一回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
 

Andere mochten auch (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の分析を支える分析基盤
 

Ähnlich wie 第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
 

Ähnlich wie 第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
 

Kürzlich hochgeladen

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
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
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
 
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
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
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
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
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
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
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
 
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
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
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
 
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
 

Kürzlich hochgeladen (20)

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
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
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
 
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?
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
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...
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
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
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
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
 
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
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
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)
 
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...
 

第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)

Hinweis der Redaktion

  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