差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

Both sides previous revision 前次修改
下次修改
前次修改
下次修改 Both sides next revision
java:effective_java:concurrency:use_lazy_initialization_judiciously [2020/02/02 13:24]
tony
java:effective_java:concurrency:use_lazy_initialization_judiciously [2020/02/02 17:26]
tony [Double-check idiom]
行 61: 行 61:
   
  synchronized(Singleton.class) {  synchronized(Singleton.class) {
- if( ​instance ​!= null ) { // with locking + result = instance; 
- return ​instance;+ if( result ​!= null ) { // with locking 
 + return ​result;
  }  }
   
行 88: 行 89:
 這一樣是透過ClassLoader載入Class Thread-Safe的機制,來解決同步存取的問題。目前這是要初始化static欄位的首選。 這一樣是透過ClassLoader載入Class Thread-Safe的機制,來解決同步存取的問題。目前這是要初始化static欄位的首選。
 ===== Enum method ===== ===== Enum method =====
-這方法是看Java高併發編程詳解:多線程與架構設計這本書時,有提到透過Enum去解這問題是Effective Java作者力推的方法,但我第二版與第三版中並沒看到,可能是第一版的內容。在這我就稍微說明Enum method的做法。+這方法是看Java高併發編程詳解:多線程與架構設計這本書時,有提到透過Enum去解這問題是Effective Java作者力推的方法,在Item89有提及。在這我就稍微說明Enum method的做法
 +<code java> 
 +public enum Singleton { 
 +  
 + INSTANCE;​ 
 +  
 + public static Singleton get() { 
 + return INSTANCE; 
 +
 +
 +</​code>​ 
 +Enum擁有Thread-safe、只能被初始化一次且不能夠被繼承的特性;缺點就是無法做Lazy initialization,要解決這問題可以與Holder方式結合。但與其這樣,不如使用Holder就好 
 + 
 ===== Note ===== ===== Note =====
 Effective Java第三版Item 83。 Effective Java第三版Item 83。