回答編集履歴

2

コードの間違いを修正

2017/07/03 14:58

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -38,11 +38,13 @@
38
38
 
39
39
  public void actionPerformed(ActionEvent event){
40
40
 
41
- synchoronized (stopwatch2.this) { // このに書く。
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

文章訂正

2017/07/03 14:58

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- mainメソッドでsynchronized(sw)としていますが、この際の同期対象オブジェクトはstopwatch2クラスのインスタンスです。それと排他制御をしようとしていると思われる箇所はstopwatch2のコンストラクター内での以下のコードだと思います。しかし、こうくと同期対象インスタンスはActionListenerの無名クラスのインスタンスとなります。それぞれ違うインスタンスに対してsynchronizedしているので同期になっていないと思います。
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
- 対処は簡単です。同一のインスタンスに対してsynchoronizedを用いれば
29
+ とりあえずの対処として、同一のインスタンスに対してsynchoronizedを用いうにしてみてはどうしょう(それで期待通り動くかどうかまでは確認していません)
30
30
 
31
31
 
32
32