zoukankan      html  css  js  c++  java
  • 死锁实现与问题定位

    死锁范例:

    package com.array7.concurrent;
    
    public class DeadLockTest {
    	private static Object res1 = new Object();
    	private static Object res2 = new Object();
    	public static void main(String[] args) {
    		for (int i = 0; i < 5; i++) {
    			new Thread(new MyRun1()).start();
    			new Thread(new MyRun2()).start();
    		}
    	}
    	public static class MyRun1 implements Runnable {
    		@Override
    		public void run() {
    			synchronized (res1) {
    				System.out.println("MyRun1 res1......");
    				synchronized (res2) {
    					System.out.println("MyRun1 res2......");
    				}
    			}
    		}
    	}
    	public static class MyRun2 implements Runnable {
    		@Override
    		public void run() {
    			synchronized (res2) {
    				System.out.println("MyRun2 res1......");
    				synchronized (res1) {
    					System.out.println("MyRun2 res2......");
    				}
    			}
    		}
    	}
    }
    
    
    

    jstack

    2015-10-20 11:58:49
    Full thread dump Java HotSpot(TM) 64-Bit Server VM (24.51-b03 mixed mode):
    
    "DestroyJavaVM" prio=6 tid=0x000000000241e000 nid=0x16a8 waiting on condition [0x0000000000000000]
       java.lang.Thread.State: RUNNABLE
    
       Locked ownable synchronizers:
    	- None
    
    "Thread-9" prio=6 tid=0x000000000c3c9000 nid=0x2760 waiting for monitor entry [0x000000000d7df000]
       java.lang.Thread.State: BLOCKED (on object monitor)
    	at com.array7.concurrent.DeadLockTest$MyRun2.run(DeadLockTest.java:27)
    	- waiting to lock <0x00000007d5b98738> (a java.lang.Object)
    	at java.lang.Thread.run(Thread.java:744)
    
       Locked ownable synchronizers:
    	- None
    
    "Thread-8" prio=6 tid=0x000000000c3c8800 nid=0x279c waiting for monitor entry [0x000000000d5cf000]
       java.lang.Thread.State: BLOCKED (on object monitor)
    	at com.array7.concurrent.DeadLockTest$MyRun1.run(DeadLockTest.java:16)
    	- waiting to lock <0x00000007d5b98728> (a java.lang.Object)
    	at java.lang.Thread.run(Thread.java:744)
    
       Locked ownable synchronizers:
    	- None
    
    "Thread-7" prio=6 tid=0x000000000c3c6800 nid=0x274c waiting for monitor entry [0x000000000d38f000]
       java.lang.Thread.State: BLOCKED (on object monitor)
    	at com.array7.concurrent.DeadLockTest$MyRun2.run(DeadLockTest.java:27)
    	- waiting to lock <0x00000007d5b98738> (a java.lang.Object)
    	at java.lang.Thread.run(Thread.java:744)
    
       Locked ownable synchronizers:
    	- None
    
    "Thread-6" prio=6 tid=0x000000000c3c3800 nid=0x276c waiting for monitor entry [0x000000000d4be000]
       java.lang.Thread.State: BLOCKED (on object monitor)
    	at com.array7.concurrent.DeadLockTest$MyRun1.run(DeadLockTest.java:16)
    	- waiting to lock <0x00000007d5b98728> (a java.lang.Object)
    	at java.lang.Thread.run(Thread.java:744)
    
       Locked ownable synchronizers:
    	- None
    
    "Thread-5" prio=6 tid=0x000000000c3c3000 nid=0x2784 waiting for monitor entry [0x000000000d23f000]
       java.lang.Thread.State: BLOCKED (on object monitor)
    	at com.array7.concurrent.DeadLockTest$MyRun2.run(DeadLockTest.java:27)
    	- waiting to lock <0x00000007d5b98738> (a java.lang.Object)
    	at java.lang.Thread.run(Thread.java:744)
    
       Locked ownable synchronizers:
    	- None
    
    "Thread-4" prio=6 tid=0x000000000c3b8800 nid=0x2798 waiting for monitor entry [0x000000000d0ff000]
       java.lang.Thread.State: BLOCKED (on object monitor)
    	at com.array7.concurrent.DeadLockTest$MyRun1.run(DeadLockTest.java:16)
    	- waiting to lock <0x00000007d5b98728> (a java.lang.Object)
    	at java.lang.Thread.run(Thread.java:744)
    
       Locked ownable synchronizers:
    	- None
    
    "Thread-3" prio=6 tid=0x000000000c3b8000 nid=0x2794 waiting for monitor entry [0x000000000cf2f000]
       java.lang.Thread.State: BLOCKED (on object monitor)
    	at com.array7.concurrent.DeadLockTest$MyRun2.run(DeadLockTest.java:29)
    	- waiting to lock <0x00000007d5b98728> (a java.lang.Object)
    	- locked <0x00000007d5b98738> (a java.lang.Object)
    	at java.lang.Thread.run(Thread.java:744)
    
       Locked ownable synchronizers:
    	- None
    
    "Thread-2" prio=6 tid=0x000000000c3b7000 nid=0x282c waiting for monitor entry [0x000000000ce2f000]
       java.lang.Thread.State: BLOCKED (on object monitor)
    	at com.array7.concurrent.DeadLockTest$MyRun1.run(DeadLockTest.java:18)
    	- waiting to lock <0x00000007d5b98738> (a java.lang.Object)
    	- locked <0x00000007d5b98728> (a java.lang.Object)
    	at java.lang.Thread.run(Thread.java:744)
    
       Locked ownable synchronizers:
    	- None
    
    "Service Thread" daemon prio=6 tid=0x000000000c3a3000 nid=0x2550 runnable [0x0000000000000000]
       java.lang.Thread.State: RUNNABLE
    
       Locked ownable synchronizers:
    	- None
    
    "C2 CompilerThread1" daemon prio=10 tid=0x000000000c3a1000 nid=0x2958 waiting on condition [0x0000000000000000]
       java.lang.Thread.State: RUNNABLE
    
       Locked ownable synchronizers:
    	- None
    
    "C2 CompilerThread0" daemon prio=10 tid=0x000000000aeb9000 nid=0x2954 waiting on condition [0x0000000000000000]
       java.lang.Thread.State: RUNNABLE
    
       Locked ownable synchronizers:
    	- None
    
    "Attach Listener" daemon prio=10 tid=0x000000000aeb8000 nid=0x2940 waiting on condition [0x0000000000000000]
       java.lang.Thread.State: RUNNABLE
    
       Locked ownable synchronizers:
    	- None
    
    "Signal Dispatcher" daemon prio=10 tid=0x000000000aeb1000 nid=0x2928 runnable [0x0000000000000000]
       java.lang.Thread.State: RUNNABLE
    
       Locked ownable synchronizers:
    	- None
    
    "Finalizer" daemon prio=8 tid=0x000000000ae46800 nid=0x21ec in Object.wait() [0x000000000c00f000]
       java.lang.Thread.State: WAITING (on object monitor)
    	at java.lang.Object.wait(Native Method)
    	- waiting on <0x00000007d5b05568> (a java.lang.ref.ReferenceQueue$Lock)
    	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135)
    	- locked <0x00000007d5b05568> (a java.lang.ref.ReferenceQueue$Lock)
    	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151)
    	at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:189)
    
       Locked ownable synchronizers:
    	- None
    
    "Reference Handler" daemon prio=10 tid=0x000000000ae3d800 nid=0x2970 in Object.wait() [0x000000000605f000]
       java.lang.Thread.State: WAITING (on object monitor)
    	at java.lang.Object.wait(Native Method)
    	- waiting on <0x00000007d5b050f0> (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 <0x00000007d5b050f0> (a java.lang.ref.Reference$Lock)
    
       Locked ownable synchronizers:
    	- None
    
    "VM Thread" prio=10 tid=0x000000000ae38000 nid=0x295c runnable 
    
    "GC task thread#0 (ParallelGC)" prio=6 tid=0x000000000246d000 nid=0x267c runnable 
    
    "GC task thread#1 (ParallelGC)" prio=6 tid=0x000000000246f000 nid=0x2120 runnable 
    
    "GC task thread#2 (ParallelGC)" prio=6 tid=0x0000000002470800 nid=0x25d0 runnable 
    
    "GC task thread#3 (ParallelGC)" prio=6 tid=0x0000000002472000 nid=0x16c8 runnable 
    
    "VM Periodic Task Thread" prio=10 tid=0x000000000c3b4000 nid=0x28d4 waiting on condition 
    
    JNI global references: 105
    
    
    Found one Java-level deadlock:
    =============================
    "Thread-9":
      waiting to lock monitor 0x000000000c3be7b8 (object 0x00000007d5b98738, a java.lang.Object),
      which is held by "Thread-3"
    "Thread-3":
      waiting to lock monitor 0x000000000ae463a8 (object 0x00000007d5b98728, a java.lang.Object),
      which is held by "Thread-2"
    "Thread-2":
      waiting to lock monitor 0x000000000c3be7b8 (object 0x00000007d5b98738, a java.lang.Object),
      which is held by "Thread-3"
    
    Java stack information for the threads listed above:
    ===================================================
    "Thread-9":
    	at com.array7.concurrent.DeadLockTest$MyRun2.run(DeadLockTest.java:27)
    	- waiting to lock <0x00000007d5b98738> (a java.lang.Object)
    	at java.lang.Thread.run(Thread.java:744)
    "Thread-3":
    	at com.array7.concurrent.DeadLockTest$MyRun2.run(DeadLockTest.java:29)
    	- waiting to lock <0x00000007d5b98728> (a java.lang.Object)
    	- locked <0x00000007d5b98738> (a java.lang.Object)
    	at java.lang.Thread.run(Thread.java:744)
    "Thread-2":
    	at com.array7.concurrent.DeadLockTest$MyRun1.run(DeadLockTest.java:18)
    	- waiting to lock <0x00000007d5b98738> (a java.lang.Object)
    	- locked <0x00000007d5b98728> (a java.lang.Object)
    	at java.lang.Thread.run(Thread.java:744)
    
    Found 1 deadlock.
    
    
    
  • 相关阅读:
    使用最新最酷的安卓开发技术
    Android之ConnectivityManager
    Android -- ViewDragHelper
    android 管理手机短信
    内存管理[6]测试堆的内存占用情况
    内存管理[5]通过 GetProcessHeaps 函数获取了当前进程的堆句柄列表
    内存管理[4]一个使用私有堆的例子
    内存管理[3]堆
    内存管理[2]
    内存管理[1]
  • 原文地址:https://www.cnblogs.com/liushijie/p/4894394.html
Copyright © 2011-2022 走看看