1.死锁的demo import java.util.concurrent.TimeUnit; /** * @author zhang.rongshan * @create 2022-01-02 下午10:15 */ public class ThreadDemo02 { //创建2个对象 static Object a= new Object(); static Object b = new Object(); public static void main(String[] args) { new Thread(()->{ synchronized (a){ System.out.println(Thread.currentThread().getName()+"持有锁A,试图获取锁B"); try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (b){ System.out.println(Thread.currentThread().getName()+"获取锁BB"); } } },"AA").start(); new Thread(()->{ synchronized (b){ System.out.println(Thread.currentThread().getName()+"持有锁B,试图获取锁A"); try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (a){ System.out.println(Thread.currentThread().getName()+"获取锁AA"); } } },"BB").start(); } }
2.死锁产生的原因:(1)系统资源不足 (2)进程运行推进顺序不合适 (3)资源分配不当
验证是否是死锁:(1)jps 类似:linux的 :ps-ef 找到进程号 (2)jstack jvm自带堆栈跟踪工具