回答編集履歴
2
3の回答がおかしかったので修正
test
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
2. maisumakunさんの説明通り。`new` したものを宣言していないので`null`です。
|
6
6
|
|
7
|
-
3.
|
7
|
+
3. 認識はあっています。double-checked locking というイディオムですが、javaでは推奨されません
|
8
8
|
|
9
9
|
4. `volatile`は気にしなくてよいです。
|
10
10
|
|
1
要約追加
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 を使用することです。
|