回答編集履歴

2

3の回答がおかしかったので修正

2017/07/13 11:08

投稿

momon-ga
momon-ga

スコア4820

test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  2. maisumakunさんの説明通り。`new` したものを宣言していないので`null`です。
6
6
 
7
- 3. インスタンスが使われなとGCによりいなくなりますので、nullになることがあり得す。
7
+ 3. 認識はあっています。double-checked locking いうイディオムです、javaでは推奨されせん
8
8
 
9
9
  4. `volatile`は気にしなくてよいです。
10
10
 

1

要約追加

2017/07/13 11:08

投稿

momon-ga
momon-ga

スコア4820

test CHANGED
@@ -23,3 +23,9 @@
23
23
 
24
24
 
25
25
  [IBM Developerworks:double-checked lockingとSingletonパターン](https://www.ibm.com/developerworks/jp/java/library/j-dcl/index.html)
26
+
27
+
28
+
29
+ ## 要約
30
+
31
+ > プログラマーたちは、Singletonで高コストな同期化を回避するために、工夫を凝らして、double-checked lockingイディオムを考案しました。残念ながら、このイディオムが、現行のメモリー・モデルが原因で安全なプログラミング構成概念ではないことが明らかになったのは、これがかなり広く使われるようになった後のことでした。メモリー・モデルの、ぜい弱な部分を改良するための努力が行われています。しかし、新しく提案されたメモリー・モデルでも、double-checked lockingは通用しません。この問題に対する最良の解決策は、同期化を受け入れるか、あるいはstatic field を使用することです。