package ttzz.juc.juc2;
/**
* 第55讲 死锁编码和定位分析
* 1.什么是死锁?
* 指两个或者两个以上的进程在执行过程中,因争夺资源而造成的互相等待的现象,若无外力干预,他们将持续性的耗下去,
* 如果系统资源充足,进程的资源请求都能得到满足,死锁出现的可能性低,否则就会因为争夺有限的资源而陷入死锁
* 2. 造成死锁的原因:
* 1)系统资源不足
* 2)代码问题
* 3)内存分配不合理
*/
public class ThreadPool_55 {
public static void main(String[] args) {
String lockA = "lockA";
String lockB = "lockB";
new Thread(new LockThread(lockA,lockB),"ThreadAAA").start();
new Thread(new LockThread(lockB,lockA),"ThreadBBB").start();
/**
* 查看进程
* linux ps -ef|grep XXX ;ls -l
* windows :jps -l 找到进程编号 ;jstack pid
*/
}
}
class LockThread implements Runnable{
private String lockA;
private String lockB;
public LockThread(String lockA, String lockB) {
super();
this.lockA = lockA;
this.lockB = lockB;
}
@Override
public void run() {
synchronized (lockA) {
System.out.println(Thread.currentThread().getName()+":占有锁:"+lockA+",尝试获得锁"+lockB);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lockB) {
System.out.println(Thread.currentThread().getName()+":占有锁:"+lockB+",尝试获得锁"+lockA);
}
}
}
}
死锁编码和定位分析
Guess you like
Origin blog.csdn.net/weixin_39472101/article/details/117559292
Recommended
Ranking