Java 给出下面关于死锁的代码…为什么这里没有死锁,我应该做什么更改来发生死锁

Java 给出下面关于死锁的代码…为什么这里没有死锁,我应该做什么更改来发生死锁,java,output,deadlock,Java,Output,Deadlock,这里我只想使用join()方法查看死锁条件。我知道使用synchronized关键字的死锁代码。但是我们如何使用join方法执行死锁条件呢?您的代码没有编译,在定义之前,您正在jt1的构造函数中使用jt2 为了获得死锁,您应该为JoinThread1定义一个没有任何参数的新构造函数。因此,首先使用新构造函数定义jt1。然后通过参数jt1定义jt2(就像现在一样)。然后,您应该为JoinThread1中的另一个线程定义一个setter 示例: 新构造函数 public class Test15_D

这里我只想使用
join()
方法查看死锁条件。我知道使用synchronized关键字的死锁代码。但是我们如何使用join方法执行死锁条件呢?

您的代码没有编译,在定义之前,您正在
jt1
的构造函数中使用
jt2

为了获得死锁,您应该为
JoinThread1
定义一个没有任何参数的新构造函数。因此,首先使用新构造函数定义jt1。然后通过参数jt1定义jt2(就像现在一样)。然后,您应该为JoinThread1中的另一个线程定义一个
setter

示例:

新构造函数

public class Test15_DeadLockUsingJoinMethod {
    public static void main(String[] args) throws InterruptedException {

        JoinThread1 jt1=new JoinThread1(jt2); 
        JoinThread2 jt2=new JoinThread2(jt1);
        jt1.start();
        jt2.start();
    }

}

class JoinThread1 extends Thread {

    JoinThread2 jt2;
    public JoinThread1(JoinThread2 jt2) {
        this.jt2=jt2;
    }
    public void run() {
        System.out.println("1st thread execution start");
        try {
            jt2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("1st thread execution stopped"); 
    }
}

class JoinThread2 extends Thread {

    JoinThread1 jt1;
    public JoinThread2(JoinThread1 jt1) {
        this.jt1=jt1;

    }
    public void run() {
        System.out.println("2nd thread execution start");
        try {
            jt1.join();
        } catch (InterruptedException e){
            e.printStackTrace();
        }
            System.out.println("2nd thread execution stopped"); 
    }
}
设置器方法

public JoinThread1() {
}
Main

公共静态void main(字符串[]args)引发InterruptedException{

public void setThread(JoinThread2 jt2){
    this.jt2 = jt2;
}

更改后,将出现死锁。

此代码是否编译?在定义之前,您正在
jt1
的构造函数中使用
jt2
    JoinThread1 jt1=new JoinThread1(); 
    JoinThread2 jt2=new JoinThread2(jt1);
    jt1.setThread(jt2);

    jt1.start();
    jt2.start();
}