回答編集履歴
2
コードの間違いを修正
test
CHANGED
@@ -38,11 +38,13 @@
|
|
38
38
|
|
39
39
|
public void actionPerformed(ActionEvent event){
|
40
40
|
|
41
|
-
|
41
|
+
Object lock = stopwatch2.this; //このオブジェクトを同期に使う
|
42
|
+
|
43
|
+
synchoronized (lock) {
|
42
44
|
|
43
45
|
isRunning = true;
|
44
46
|
|
45
|
-
notify();
|
47
|
+
lock.notify();
|
46
48
|
|
47
49
|
}
|
48
50
|
|
1
文章訂正
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
mainメソッドでsynchronized(sw)としていますが、この際の同期対象オブジェクトはstopwatch2クラスのインスタンスです。それと排他制御をしようとしていると思われる箇所はstopwatch2のコンストラクター内での以下のコードだと思います。しかし、こう
|
5
|
+
mainメソッドでsynchronized(sw)としていますが、この際の同期対象オブジェクトはstopwatch2クラスのインスタンスです。それと排他制御をしようとしていると思われる箇所はstopwatch2のコンストラクター内での以下のコードだと思います。しかし、こう書くと同期対象インスタンスはActionListenerの無名クラスのインスタンスとなります。それぞれ違うインスタンスに対してsynchronizedしているので同期になっていないと思います。
|
6
6
|
|
7
7
|
|
8
8
|
|
@@ -26,7 +26,7 @@
|
|
26
26
|
|
27
27
|
|
28
28
|
|
29
|
-
対処
|
29
|
+
とりあえずの対処として、同一のインスタンスに対してsynchoronizedを用いるようにしてみてはどうでしょう。(それで期待通り動くかどうかまでは確認していません)
|
30
30
|
|
31
31
|
|
32
32
|
|