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();
}