死锁是指两个或两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力干涉他们将都无法推进下去。如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因为争夺有限的资源而陷入死锁。
public class DeadLockDemo {
static Object lockA = new Object();
static Object lockB = new Object();
public static void main(String[] args) {
new Thread(()->{
synchronized (lockA) {
// 让当前线程睡眠,保证让另一线程得到锁进入同步方法
try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); }
synchronized (lockB) {
System.out.println("success");
}
}
}).start();
new Thread(()->{
synchronized (lockB) {
synchronized (lockA) {
System.out.println("success");
}
}
}).start();
}
}
死锁排查?
用jsp -l查看java进程
用jstack 8680查询进程信息
|