zoukankan      html  css  js  c++  java
  • [java] jstack 查看死锁问题

    package com.xwolf.java.thread.ch2;
    
    /**
     * Created by Administrator on 2016/1/4 0004.
     */
    public class DeadLock {
        private static  String a ="A";
        private static String b ="B";
    
        public static void main(String[] args) {
            new DeadLock().deadLock();
        }
    
        private void deadLock(){
            Thread thread1 = new Thread(new Runnable() {
    
    
                public void run() {
    
                    synchronized (a) {
                        try {
                            Thread.currentThread().sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
    
                        synchronized (b) {
                            System.out.println("Thread-0001");
                        }
                    }
    
    
                }
            });
    
    
            Thread thread2 = new Thread(new Runnable() {
    
    
                public void run() {
    
                    synchronized (b) {
                        synchronized (a) {
                            System.out.println("Thread-0002");
                        }
                    }
    
    
                }
            });
    
    
            thread1.start();
            thread2.start();
        }
    }

    D:Program FilesJavajdk1.7.0_79in>jps
    11212 Launcher
    7332 Jps
    2744 RemoteMavenServer
    10108 NailgunRunner
    7760 AppMain
    7152

    D:Program FilesJavajdk1.7.0_79in>jstack -l 7760
    2016-01-04 16:36:17
    Full thread dump Java HotSpot(TM) 64-Bit Server VM (24.79-b02 mixed mode):

    "DestroyJavaVM" prio=6 tid=0x0000000002745000 nid=0x2aa8 waiting on condition [0x0000000000000000]
    java.lang.Thread.State: RUNNABLE

    Locked ownable synchronizers:
    - None

    "Thread-1" prio=6 tid=0x000000000ef63800 nid=0x13ec waiting for monitor entry [0x000000000fa1f000]
    java.lang.Thread.State: BLOCKED (on object monitor)
    at com.xwolf.java.thread.ch2.DeadLock$2.run(DeadLock.java:44)
    - waiting to lock <0x00000007c0b57ee8> (a java.lang.String)
    - locked <0x00000007c0b57f18> (a java.lang.String)
    at java.lang.Thread.run(Thread.java:745)

    Locked ownable synchronizers:
    - None

    "Thread-0" prio=6 tid=0x000000000ef62800 nid=0x1c58 waiting for monitor entry [0x000000000f91f000]
    java.lang.Thread.State: BLOCKED (on object monitor)
    at com.xwolf.java.thread.ch2.DeadLock$1.run(DeadLock.java:28)
    - waiting to lock <0x00000007c0b57f18> (a java.lang.String)
    - locked <0x00000007c0b57ee8> (a java.lang.String)
    at java.lang.Thread.run(Thread.java:745)

    Locked ownable synchronizers:
    - None

    "Monitor Ctrl-Break" daemon prio=6 tid=0x000000000ef72000 nid=0x18d4 runnable [0x000000000f81e000]
    java.lang.Thread.State: RUNNABLE
    at java.net.DualStackPlainSocketImpl.accept0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketAccept(DualStackPlainSocketImpl.java:131)
    at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:398)
    at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:199)
    - locked <0x00000007c0d3a1c8> (a java.net.SocksSocketImpl)
    at java.net.ServerSocket.implAccept(ServerSocket.java:530)
    at java.net.ServerSocket.accept(ServerSocket.java:498)
    at com.intellij.rt.execution.application.AppMain$1.run(AppMain.java:90)
    at java.lang.Thread.run(Thread.java:745)

    Locked ownable synchronizers:
    - None

    "Service Thread" daemon prio=6 tid=0x000000000d0e5800 nid=0x12d8 runnable [0x0000000000000000]
    java.lang.Thread.State: RUNNABLE

    Locked ownable synchronizers:
    - None

    "C2 CompilerThread1" daemon prio=10 tid=0x000000000d0d6000 nid=0x2314 waiting on condition [0x0000000000000000]
    java.lang.Thread.State: RUNNABLE

    Locked ownable synchronizers:
    - None

    "C2 CompilerThread0" daemon prio=10 tid=0x000000000d0d4800 nid=0x728 waiting on
    condition [0x0000000000000000]
    java.lang.Thread.State: RUNNABLE

    Locked ownable synchronizers:
    - None

    "Attach Listener" daemon prio=10 tid=0x000000000d0d4000 nid=0x1b0 waiting on condition [0x0000000000000000]
    java.lang.Thread.State: RUNNABLE

    Locked ownable synchronizers:
    - None

    "Signal Dispatcher" daemon prio=10 tid=0x000000000d0d1000 nid=0x204c runnable [0x0000000000000000]
    java.lang.Thread.State: RUNNABLE

    Locked ownable synchronizers:
    - None

    "Finalizer" daemon prio=8 tid=0x000000000282c800 nid=0x246c in Object.wait() [0x000000000e42f000]
    java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <0x00000007c0684858> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135)
    - locked <0x00000007c0684858> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151)
    at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)

    Locked ownable synchronizers:
    - None

    "Reference Handler" daemon prio=10 tid=0x0000000002824800 nid=0x70 in Object.wait() [0x000000000e32f000]
    java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <0x00000007c0684470> (a java.lang.ref.Reference$Lock)
    at java.lang.Object.wait(Object.java:503)
    at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)
    - locked <0x00000007c0684470> (a java.lang.ref.Reference$Lock)

    Locked ownable synchronizers:
    - None

    "VM Thread" prio=10 tid=0x000000000d093000 nid=0xe4c runnable

    "GC task thread#0 (ParallelGC)" prio=6 tid=0x000000000275b800 nid=0x120 runnable

    "GC task thread#1 (ParallelGC)" prio=6 tid=0x000000000275d800 nid=0x510 runnable

    "GC task thread#2 (ParallelGC)" prio=6 tid=0x000000000275f000 nid=0x2564 runnable

    "GC task thread#3 (ParallelGC)" prio=6 tid=0x0000000002761800 nid=0x244c runnable

    "VM Periodic Task Thread" prio=10 tid=0x000000000d11a000 nid=0x14e8 waiting on condition

    JNI global references: 153


    Found one Java-level deadlock:
    =============================
    "Thread-1":
    waiting to lock monitor 0x000000000282afa8 (object 0x00000007c0b57ee8, a java.lang.String),
    which is held by "Thread-0"
    "Thread-0":
    waiting to lock monitor 0x000000000282c238 (object 0x00000007c0b57f18, a java.lang.String),
    which is held by "Thread-1"

    Java stack information for the threads listed above:
    ===================================================
    "Thread-1":
    at com.xwolf.java.thread.ch2.DeadLock$2.run(DeadLock.java:44)
    - waiting to lock <0x00000007c0b57ee8> (a java.lang.String)
    - locked <0x00000007c0b57f18> (a java.lang.String)
    at java.lang.Thread.run(Thread.java:745)
    "Thread-0":
    at com.xwolf.java.thread.ch2.DeadLock$1.run(DeadLock.java:28)
    - waiting to lock <0x00000007c0b57f18> (a java.lang.String)
    - locked <0x00000007c0b57ee8> (a java.lang.String)
    at java.lang.Thread.run(Thread.java:745)

    Found 1 deadlock.

    可以看到程序中的死锁问题,已经线程的一系列信息。

  • 相关阅读:
    组合模式扩展,有选择的递归
    SQL分页查询【转】
    facade外观模式
    C#:几种数据库的大数据批量插入 faib
    装饰模式的扩展
    yeild之我理解
    数据库操作 sqlserver查询存储过程+分页
    SQL Server 索引结构及其使用(二)[转]
    SQL索引使用初步,(转)
    解决多集成,多子类,扩展等 装饰模式
  • 原文地址:https://www.cnblogs.com/lonelywolfmoutain/p/5099472.html
Copyright © 2011-2022 走看看