死锁:两个或两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力干涉它们都将无法推进下去。
死锁示例代码:
/**
* @author luffy
**/
public class DeadLockDemo {
public static void main(String[] args){
String lockA = "LockA";
String lockB = "LockB";
new Thread(()->{
new DeadLockData(lockA,lockB).LockMethod();
},"lockA").start();
new Thread(()->{
new DeadLockData(lockB,lockA).LockMethod();
},"LockB").start();
}
}
@Data
class DeadLockData{
private String lockA;
private String lockB;
public DeadLockData(String lockA, String lockB) {
this.lockA = lockA;
this.lockB = lockB;
}
public void LockMethod(){
synchronized (this.lockA){
System.out.println(Thread.currentThread().getName()+"获得A,尝试获得B!");
synchronized (this.lockB){
System.out.println(Thread.currentThread().getName()+"获得B,尝试获得A!");
}
}
}
}
死锁解决 & 问题定位:
- cls // 清屏
- jps -l // 定位进程号
- jstack // 查看堆栈信息


网友评论