質問内容
以下のコードで後者の方を実行するとAからとBからを一回ずつしか実行されないのですがその理由はなぜですか?
コード1
Java
1class MyBank{ 2 private String name; 3 private int value; 4 MyBank(String n,int initial_value){ 5 name=n; 6 value=initial_value; 7 } 8 public void transferMoney(MyBank other,int amount) throws InterruptedException{ 9 synchronized(this){ 10 System.out.println("Transferring "+amount+" from "+name); 11 Thread.sleep(100); 12 synchronized(other){ 13 if(amount>value) System.out.println("Not enough money"); 14 else{ 15 other.value=other.value+amount; 16 this.value-=amount; 17 } 18 } 19 } 20 } 21}
コード2
Java
1import java.util.Random; 2class MyBankTest extends Thread{ 3 MyBank b1,b2; 4 Random rand=new Random(); 5 MyBankTest(MyBank b1,MyBank b2){ 6 this.b1=b1; 7 this.b2=b2; 8 } 9 public void run(){ 10 try{ 11 while(true){ 12 b1.transferMoney(b2,rand.nextInt(100)); 13 } 14 }catch(InterruptedException e){ 15 System.out.println(e); 16 } 17 } 18 public static void main(String[] args){ 19 MyBank a=new MyBank("A",1000); 20 MyBank b=new MyBank("B",1000); 21 new MyBankTest(a,b).start(); 22 new MyBankTest(b,a).start(); 23 24 } 25}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/13 05:16
2020/07/13 05:33
2020/07/13 06:24