回答編集履歴

1

追記

2020/07/13 05:33

投稿

root_jp
root_jp

スコア4666

test CHANGED
@@ -3,3 +3,43 @@
3
3
  次の`synchronized`ブロックで、お互いを掴もうとしてますが、もう掴み済みなのでお互いが開放されるのを待っています。
4
4
 
5
5
  いわゆるデッドロックですね。
6
+
7
+
8
+
9
+ ### コメントに対する追記
10
+
11
+
12
+
13
+ 自分から金額を引き落として、相手に振り込むまでを1トランザクションとしたいため、
14
+
15
+ 以下のようにすればいいと思います。
16
+
17
+
18
+
19
+ ```Java
20
+
21
+ public void transferMoney(MyBank other, int amount) throws InterruptedException {
22
+
23
+ synchronized (MyBank.class) {
24
+
25
+ System.out.println("Transferring " + amount + " from " + name);
26
+
27
+ Thread.sleep(100);
28
+
29
+ if (amount > value)
30
+
31
+ System.out.println("Not enough money");
32
+
33
+ else {
34
+
35
+ other.value = other.value + amount;
36
+
37
+ this.value -= amount;
38
+
39
+ }
40
+
41
+ }
42
+
43
+ }
44
+
45
+ ```