zoukankan      html  css  js  c++  java
  • 死锁篇

    死锁篇

    死锁定义

    死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一一种互相等待的现象,若无外力干涉那它们都将无法推进下去,如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。

    死锁代码

    public class DeadLock {
        public static void main(String[] args) {
            Object o1 = new Object();
            Object o2 = new Object();
    
            new Thread(()->{
                synchronized (o1) {
                    System.out.println(Thread.currentThread().getName()+"	 我抢到了o1");
                    try {
                        TimeUnit.SECONDS.sleep(2);} catch (InterruptedException e) {e.printStackTrace();}
                    synchronized (o2) {
                        System.out.println(Thread.currentThread().getName()+"	 我抢到了o2");
                    }
                }
    
            },"A").start();
            new Thread(()->{
                synchronized (o2) {
                    System.out.println(Thread.currentThread().getName()+"	 我抢到了o2");
                    try {
                        TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}
                    synchronized (o1) {
                        System.out.println(Thread.currentThread().getName()+"	 我抢到了o1");
                    }
                }
    
            },"B").start();
        }
    }
    

    找到死锁

    jps

    jps -l 查看当前java运行的线程

    18704 sun.tools.jps.Jps
    13044 org.jetbrains.kotlin.daemon.KotlinCompileDaemon
    10616 尚硅谷.juc.锁篇.死锁.DeadLock
    20712 org.jetbrains.jps.cmdline.Launcher
    23036 org.jetbrains.idea.maven.server.RemoteMavenServer36
    5804
    

    jstack

    jstack 进程号

    Java stack information for the threads listed above:
    ===================================================
    "B":
            at 尚硅谷.juc.锁篇.死锁.DeadLock.lambda$main$1(DeadLock.java:33)
            - waiting to lock <0x00000000d621ba58> (a java.lang.Object)
            - locked <0x00000000d621ba68> (a java.lang.Object)
            at 尚硅谷.juc.锁篇.死锁.DeadLock$$Lambda$2/2093631819.run(Unknown Source)
            at java.lang.Thread.run(Thread.java:748)
    "A":
            at 尚硅谷.juc.锁篇.死锁.DeadLock.lambda$main$0(DeadLock.java:22)
            - waiting to lock <0x00000000d621ba68> (a java.lang.Object)
            - locked <0x00000000d621ba58> (a java.lang.Object)
            at 尚硅谷.juc.锁篇.死锁.DeadLock$$Lambda$1/558638686.run(Unknown Source)
            at java.lang.Thread.run(Thread.java:748)
    
    Found 1 deadlock.
    
    
  • 相关阅读:
    JMeter结构体系及运行原理
    maven pom配置文件样本
    django踩坑
    spring踩坑
    蓝牙连上电脑没声音
    XML 解析 & 特殊字符报错
    IDEA下maven工程的classpath
    mysql踩坑
    工作日记-9 远程接口调用注意点
    工作日记-8 ajax缓存
  • 原文地址:https://www.cnblogs.com/lovestart/p/12464750.html
Copyright © 2011-2022 走看看