gpt4 book ai didi

java - 这是线程死锁吗

转载 作者:行者123 更新时间:2023-11-29 10:12:49 25 4
gpt4 key购买 nike

我想有意做/测试 java 线程死锁状态,所以我制作了以下示例代码:

public class TestDeadLock extends Thread{
private Integer a=new Integer(9);
public void run(){

if(Thread.currentThread().getName().equals("t1")){
XXXX();
}
else{
ZZZZ();
}
}

public void XXXX(){
System.out.println("inside XXXX");
synchronized(a){
a++;
ZZZZ();
}
System.out.println("xxxxxxxxxxxxxxxxxxx");
//ZZZZ();
}

public synchronized void ZZZZ(){
System.out.println("inside ZZZZ");
synchronized(a){
a--;
XXXX();
}
System.out.println("zzzzzzzzzzzzzzzzzzzzz");
}

public static void main(String[] args) throws InterruptedException {
TestDeadLock tdl=new TestDeadLock();
Thread t1=new Thread(tdl);
Thread t2=new Thread(tdl);
t1.setName("t1");
t2.setName("t2");
t1.start();
t2.start();

Thread.sleep(1000);
System.out.println("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-="+tdl.a);
}
}

输出结果如下:

XXXX里面

在ZZZZ里面

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=10

输出未退出。

我想知道,是不是线程进入了Dead Lock状态?遇到Dead Lock是不是一个正确的例子。如果我错了建议或纠正我。

最佳答案

不,您没有遇到死锁。您遇到了 StackOverflowError,因为您正在运行一个无限循环。

注意你的方法

public synchronized void ZZZZ() {
System.out.println("inside ZZZZ");

XXXX(); // run-time exception
}

相当于

public void ZZZZ() {
synchronized(this) {
System.out.println("inside ZZZZ");

XXXX(); // run-time exception
}
}

您不会导致死锁,因为您正在处理两个不同的实例。线程 1 锁定 t1,线程 2 锁定 t2

关于java - 这是线程死锁吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27279627/

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