• 死锁篇


    死锁篇

    死锁定义

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

    死锁代码

    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.
    
    
  • 相关阅读:
    201871010115 马北 《面向对象程序设计(java)》 第67周学习总结
    201871010115马北《面向对象程序设计(java)》第一周学习总结
    《面向对象程序设计(Java)》第四周学习总结
    201871010115——马北《面向对象程序设计JAVA》第二周学习总结
    第十一周作业
    《面向对象程序设计(java)》第十周学习总结
    201871010115 马北 第八周作业
    FPGA开发全攻略——FPGA发展以及赛灵思系列产品
    嵌入式系统词汇表
    FPGA开发全攻略——FPGA内部结构
  • 原文地址:https://www.cnblogs.com/lovestart/p/12464750.html
Copyright © 2020-2023  润新知