死锁编码及其定位
1.死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力干涉他们,那他们将无法推进下去。如果系统资源充足,进程的资源请求都能够得到满足。死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。
2.产生死锁的原因
(1).系统资源不足
(2).进程运行推进的顺序不合适
(3).资源分配不当
3.死锁代码
package com.example.demo;
import java.util.concurrent.TimeUnit;
class HoldThreadLock implements Runnable{
private String lockA;
private String lockB;
public HoldThreadLock (String lockA,String lockB){
this.lockA=lockA;
this.lockB=lockB;
}
@Override
public void run() {
synchronized (lockA){
System.out.println(Thread.currentThread().getName()+"\t持有lockA"+lockA+"尝试获取lockB"+lockB);
try {
TimeUnit.SECONDS.sleep(2L);
}catch (Exception e){
e.printStackTrace();
}
synchronized (lockB){
System.out.println(Thread.currentThread().getName()+"\t持有lockA"+lockA+"尝试获取lockB"+lockB);
}
}
}
}
/**
* Created by Administrator on 2020/7/12.
*
* @author qtx
*/
public class DeadLockDemo {
public static void main(String[] args) {
String lockA="lockA";
String lockB="lockB";
new Thread(new HoldThreadLock(lockA,lockB),"t1").start();
new Thread(new HoldThreadLock(lockB,lockA),"t2").start();
//jps: ps -ef|grep xxx =java ps jps -L
}
}