import java
.util
.concurrent
.TimeUnit
;
public class DieLockDemo {
public static void main(String
[] args
) {
String a
= "a";
String b
= "b";
Source2 source2
= new Source2(a
, b
);
Source2 source21
= new Source2(b
, a
);
new Thread(new Source1(a
,b
)).start();
new Thread(new Source1(b
,a
)).start();
}
}
class Source1 implements Runnable{
String LockA
;
String LockB
;
public Source1(String lockA
, String lockB
) {
LockA
= lockA
;
LockB
= lockB
;
}
public void run(){
synchronized (LockA
){
System
.out
.println("我拿到了"+LockA
);
synchronized (LockB
){
System
.out
.println("我想要"+LockB
);
}
}
}
}
class Source2 {
String LockA
;
String LockB
;
public Source2(String lockA
, String lockB
) {
LockA
= lockA
;
LockB
= lockB
;
}
public void run() throws InterruptedException
{
synchronized (LockA
){
System
.out
.println("我拿到了"+LockA
);
TimeUnit
.SECONDS
.sleep(1);
synchronized (LockB
){
System
.out
.println("我想要"+LockB
);
}
}
}
}
死锁检测: 通过jsp-l命令找到后台的java进程,这里并不能看出哪个是死锁的进程,需要记住每一个或者你认为有死锁的进程的编号。 jstack+进程编号 然后会发现有一个deadlock就说明这有个死锁。
转载请注明原文地址:https://blackberry.8miu.com/read-30137.html