回答編集履歴
1
引用部分修正と追記
test
CHANGED
@@ -2,7 +2,13 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
+
まず、AA01自体はご自身が認識されているとおり、list1、list2へのアクセスがMTセーフでないため、
|
6
|
+
|
7
|
+
AA01もMTセーフでないクラスです。
|
8
|
+
|
9
|
+
|
10
|
+
|
5
|
-
端的に、
|
11
|
+
その話とは別に端的に、
|
6
12
|
|
7
13
|
|
8
14
|
|
@@ -27,6 +33,12 @@
|
|
27
33
|
となっていて他のスレッドからアクセスする場合は構築済みのインスタンスかnullになります。
|
28
34
|
|
29
35
|
よくあるLazyLoadの場合nullなので、nullの場合に、オブジェクト生成して設定したあとに返すような実装の場合、異なるインスタンスを返して想定外の挙動になる可能性があります。
|
36
|
+
|
37
|
+
> TSM03-J. 初期化が完了していないオブジェクトを公開しない
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
の話がこれ。
|
30
42
|
|
31
43
|
|
32
44
|
|
@@ -58,7 +70,7 @@
|
|
58
70
|
|
59
71
|
|
60
72
|
|
61
|
-
>1:「AA01.list1に対しマルチスレッドアクセス」の場合
|
73
|
+
> 1:「AA01.list1に対しマルチスレッドアクセス」の場合
|
62
74
|
|
63
75
|
マルチスレッドでアクセスしても、クラス初期化子は最初の1度しか実行されないので
|
64
76
|
|
@@ -78,7 +90,7 @@
|
|
78
90
|
|
79
91
|
AA01のインスタンは複数あるので、list2は関係ないよね?
|
80
92
|
|
81
|
-
という
|
93
|
+
という意味であれば、その通り問題ないです。
|
82
94
|
|
83
95
|
|
84
96
|
|