首先建立自己的所对象,因为查看死锁现象所以得有两个以上的锁对象.
public class MyLock {
public static final Object objA = new Object();
public static final Object objB = new Object();
}
然后写死锁类
public class DieLock extends Thread{
private boolean flag;
public DieLock(boolean flag){
this.flag = flag;
}
@Override
public void run() {
if(flag){
synchronized(MyLock.objA){
System.out.println("true----------------objA");
synchronized(MyLock.objB){
System.out.println("true--------------objB");
}
}
}else{
synchronized(MyLock.objB){
System.out.println("false------------------objB");
synchronized(MyLock.objA){
System.out.println("false-----------------objA");
}
}
}
}
}
随后启动线程的测试类
public class Test {
public static void main(String[] args) {
DieLock d1 = new DieLock(true);
DieLock d2 = new DieLock(false);
d1.start();
d2.start();
}
}
本文通过两个线程分别获取不同的对象锁,展示了如何在Java中构造一个简单的死锁场景。其中一个线程首先锁定对象A再尝试锁定对象B,而另一个线程则相反,这种情况下如果两个线程同时启动,将导致彼此等待对方释放锁资源,从而形成死锁。
370

被折叠的 条评论
为什么被折叠?



