gpt4 book ai didi

Java 程序不会终止

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:57:19 25 4
gpt4 key购买 nike

我正在尝试使用加入线程 (JAVA) 创建死锁。根据我的理解,下面的程序应该终止。有人可以解释为什么下面的程序没有终止吗?

public class DeadLockUsingJoins2 {

public static void main(String[] args) {

AThread a = new AThread(null, "A");
a.start();
AThread b = new AThread(a, "B");
b.start();
a.t = b;
}
}

class AThread extends Thread{

public Thread t;

public AThread(Thread thread, String name){
super(name);
this.t = thread;
}

@Override
public void run(){
try {
if(t != null)
t.join();
else
{
Thread.sleep(5000);
}
// if(t != null)
// t.join();
} catch (InterruptedException e) {
e.printStackTrace();
System.out.println("Somebody interruped thread - " + this.getName());
}
System.out.println("Winding Up thread - " + this.getName());
}

}

最佳答案

我看到没有终止的唯一原因是你的主线程到达了行

a.t = b;

在线程“a”到达行之前

if(t != null)
t.join();

如果是,则线程相互等待终止。

为了确保你遇到死锁 - 你的类名暗示了这一点 - 你应该重新排序你的主要方法:

public static void main(String[] args) {
AThread a = new AThread(null, "A");
AThread b = new AThread(a, "B");
a.t = b;
a.start();
b.start();
}

关于Java 程序不会终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15944930/

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