我在理解程序中死鎖情況的概念時有些困難。 我得到的輸出爲: 輸入的方法 輸入bmethod 然後發生死鎖情況。 現在,因爲我的amethod是一個同步方法,不應該先執行第一個命令,即調用bsum方法,然後啓動新線程。 ? 請解釋...死鎖情況
public class Deadlock
{
public static void main(String[] args)
{
A a= new A();
B b= new B();
new MainClass1(a,b);
new MainClass2(a,b);
}
}
class MainClass1 extends Thread
{
A a;
B b;
MainClass1(A a,B b)
{
super();
this.a=a;
this.b=b;
start();
}
public void run()
{
a.amethod(b);
}
}
class MainClass2 extends Thread
{
A a;
B b;
MainClass2(A a,B b)
{
super();
this.a=a;
this.b=b;
start();
}
public void run()
{
b.bmethod(a);
}
}
class A
{
public synchronized void amethod(B b)
{
System.out.println("Entered amethod");
try{
Thread.sleep(500);
}catch(Exception e){}
b.bsum(2,3);
}
public synchronized void asum(int a,int b)
{
System.out.println("Sum in A is");
System.out.println(a+b);
}
}
class B
{
public synchronized void bmethod(A a)
{
System.out.println("Entered bmethod");
try{
Thread.sleep(500);
}catch(Exception e){}
a.asum(3, 5);
}
public synchronized void bsum(int a, int b)
{
System.out.println("Sum in B is");
System.out.println(a+b);
}
}
請閱讀上面的解釋,它的工作原理沒有同步關鍵字只是證明它遵循解釋的方法。 – rbhawsar
步驟1:線程1:去呼叫a方法和acauires鎖A。 步驟2:線程2:去調用bmethod和acauires鎖定B. 步驟3:線程1:想要調用對象B的sum方法,但不能獲得鎖,因爲它已經給B.乙 – rbhawsar
尼古拉和rbhawsar非常感謝.. :) ..我想我得到了答案.. –