gpt4 book ai didi

java - 死锁情况

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:52:24 25 4
gpt4 key购买 nike

我在理解这个程序中死锁情况的概念时遇到了一些困难。我得到的输出为:输入方法输入方法然后出现死锁情况。现在因为我的 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);
}
}

最佳答案

您似乎在另一个对象的方法中使用了对象ab。当被调用的方法被同步时,没有人可以使用它使用的资源,因此这两种方法都需要锁定的东西=>死锁。对于这两种方法,您应该与一个公共(public)对象同步,最好是两者之外的一个。

关于java - 死锁情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12776512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com