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");
}
}
这里我想仅使用join()
方法查看死锁情况。我知道使用synchronized关键字的死锁代码。但是如何使用join方法执行死锁条件?
答案 0 :(得分:0)
您的代码无法编译,您在jt2
的构造函数中使用jt1
,然后才定义它。
为了获得死锁,您应该为JoinThread1
定义一个没有任何参数的新构造函数。所以,首先使用新的构造函数定义jt1。然后定义jt2通过参数jt1(就像你现在一样)。然后,您应该为JoinThread1中的另一个线程定义setter
。
<强> 实施例 强>
新构造函数
public JoinThread1() {
}
Setter方法
public void setThread(JoinThread2 jt2){
this.jt2 = jt2;
}
主要强>
public static void main(String [] args)抛出InterruptedException {
JoinThread1 jt1=new JoinThread1();
JoinThread2 jt2=new JoinThread2(jt1);
jt1.setThread(jt2);
jt1.start();
jt2.start();
}
在更改之后,您将陷入僵局。