zoukankan      html  css  js  c++  java
  • Java死锁演示

    Java死锁演示

    在线程中嵌套获取锁导致死锁。思路,尽量不要嵌套获取锁。

    package com.mozq.demo.demo;
    
    public class DeadLockDemo {
        private static String A = "A";
        private static String B = "B";
        public static void main(String[] args) {
            new DeadLockDemo().deadLock();
        }
        private void deadLock() {
            Thread t1 = new Thread(new Runnable() {
                @Override
                public void run() {
                    synchronized (A) {
                        System.out.println("线程1获取A锁");
                        try { Thread.currentThread().sleep(2000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        synchronized (B) {
                            System.out.println("1");
                        }
                    }
                }
            });
            Thread t2 = new Thread(new Runnable() {
                @Override
                public void run() {
                    synchronized (B) {
                        synchronized (A) {
                            System.out.println("2");
                        }
                    }
                }
            });
            t1.start();
            t2.start();
        }
    }
    

    控制台输出

    Connected to the target VM, address: '127.0.0.1:18103', transport: 'socket'
    线程1获取A锁
    

    jstack dump进程信息

    C:Program FilesJavajdk1.8.0_181in>jstack 196408 > d:/00/02/dump1.txt
    
    C:Program FilesJavajdk1.8.0_181in>netstat -ano | findstr 18103
      TCP    127.0.0.1:18103        127.0.0.1:18104        ESTABLISHED     196408
      TCP    127.0.0.1:18104        127.0.0.1:18103        ESTABLISHED     204140
    
    C:Program FilesJavajdk1.8.0_181in>jstack 204140 > d:/00/02/dump1.txt
    

    死锁信息

    "Thread-1" #14 prio=5 os_prio=0 tid=0x00000000196f1000 nid=0x33cdc waiting for monitor entry [0x000000001aaff000]
       java.lang.Thread.State: BLOCKED (on object monitor)
    	at com.mozq.demo.demo.DeadLockDemo$2.run(DeadLockDemo.java:30)
    	- waiting to lock <0x00000000d63716e0> (a java.lang.String)
    	- locked <0x00000000d6371710> (a java.lang.String)
    	at java.lang.Thread.run(Thread.java:748)
    
    "Thread-0" #13 prio=5 os_prio=0 tid=0x00000000196e7800 nid=0x33898 waiting for monitor entry [0x000000001a9fe000]
       java.lang.Thread.State: BLOCKED (on object monitor)
    	at com.mozq.demo.demo.DeadLockDemo$1.run(DeadLockDemo.java:20)
    	- waiting to lock <0x00000000d6371710> (a java.lang.String)
    	- locked <0x00000000d63716e0> (a java.lang.String)
    	at java.lang.Thread.run(Thread.java:748)
    
    Found one Java-level deadlock:
    =============================
    "Thread-1":
      waiting to lock monitor 0x0000000017f3bcc8 (object 0x00000000d63716e0, a java.lang.String),
      which is held by "Thread-0"
    "Thread-0":
      waiting to lock monitor 0x0000000017f3fd68 (object 0x00000000d6371710, a java.lang.String),
      which is held by "Thread-1"
    
    Java stack information for the threads listed above:
    ===================================================
    "Thread-1":
    	at com.mozq.demo.demo.DeadLockDemo$2.run(DeadLockDemo.java:30)
    	- waiting to lock <0x00000000d63716e0> (a java.lang.String)
    	- locked <0x00000000d6371710> (a java.lang.String)
    	at java.lang.Thread.run(Thread.java:748)
    "Thread-0":
    	at com.mozq.demo.demo.DeadLockDemo$1.run(DeadLockDemo.java:20)
    	- waiting to lock <0x00000000d6371710> (a java.lang.String)
    	- locked <0x00000000d63716e0> (a java.lang.String)
    	at java.lang.Thread.run(Thread.java:748)
    
    Found 1 deadlock.
    

    bug

    idea中运行main方法后,如何获取其对应的进程id?
    
  • 相关阅读:
    zabbix获取主从同步状态的shell
    Linux 线程占用CPU过高定位分析
    LVM
    zabbix添加端口连接数监控
    hadoop未授权访问漏洞
    nginx修改上传文件大小限制(413 Request Entity Too Large)
    官方Tomcat 7.0.81 漏洞整改记录
    python流程控制:while循环
    python流程控制:for循环
    python数据类型—列表(增改删查,统计,取值,排序)
  • 原文地址:https://www.cnblogs.com/mozq/p/12038452.html
Copyright © 2011-2022 走看看