`

java死锁示例

 
阅读更多
public class TestService {
    public static void main(String[] args) {
        Thread one=new Thread("one"){
            public void run() {
                synchronized(TestService.class){
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (args) {
                        System.out.println("one ok");
                    }
                }
            };
        };
        
        Thread two=new Thread("two"){
            public void run() {
                synchronized (args) {
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized(TestService.class){
                        System.out.println("two ok");
                    }
                }
            };
        };
        one.start();
        two.start();
    }
}




引用

C:\Users\Administrator>jps
3104
7060 TestService
6428 Jps
7180

C:\Users\Administrator>jstack -l 7060
2016-12-16 14:02:15
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.45-b02 mixed mode):

"DestroyJavaVM" #11 prio=5 os_prio=0 tid=0x0000000001c1e000 nid=0xe24 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

"two" #10 prio=5 os_prio=0 tid=0x00000000584ae800 nid=0x1924 waiting for monitor entry [0x0000000058d8f000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at testweb.TestService$2.run(TestService.java:35)
        - waiting to lock <0x00000000d61578b0> (a java.lang.Class for testweb.TestService)
        - locked <0x00000000d615b148> (a [Ljava.lang.String;)

   Locked ownable synchronizers:
        - None

"one" #9 prio=5 os_prio=0 tid=0x00000000584ad800 nid=0x1d6c waiting for monitor entry [0x0000000058c4f000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at testweb.TestService$1.run(TestService.java:19)
        - waiting to lock <0x00000000d615b148> (a [Ljava.lang.String;)
        - locked <0x00000000d61578b0> (a java.lang.Class for testweb.TestService)

   Locked ownable synchronizers:
        - None

"Service Thread" #8 daemon prio=9 os_prio=0 tid=0x000000005849a800 nid=0xd8c runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

"C1 CompilerThread1" #7 daemon prio=9 os_prio=2 tid=0x0000000057089800 nid=0x1b18 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

"C2 CompilerThread0" #6 daemon prio=9 os_prio=2 tid=0x0000000057084800 nid=0x358 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

"Attach Listener" #5 daemon prio=5 os_prio=2 tid=0x0000000057078800 nid=0x548 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

"Signal Dispatcher" #4 daemon prio=9 os_prio=2 tid=0x0000000057063000 nid=0x1f14 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

"Finalizer" #3 daemon prio=8 os_prio=1 tid=0x000000005700c000 nid=0x1e78 in Object.wait() [0x000000005801e000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x00000000d6006f58> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
        - locked <0x00000000d6006f58> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)

   Locked ownable synchronizers:
        - None

"Reference Handler" #2 daemon prio=10 os_prio=2 tid=0x0000000057003000 nid=0x1fa4 in Object.wait() [0x0000000057e6f000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x00000000d6006998> (a java.lang.ref.Reference$Lock)
        at java.lang.Object.wait(Object.java:502)
        at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:157)
        - locked <0x00000000d6006998> (a java.lang.ref.Reference$Lock)

   Locked ownable synchronizers:
        - None

"VM Thread" os_prio=2 tid=0x0000000056ffd000 nid=0x17f0 runnable

"GC task thread#0 (ParallelGC)" os_prio=0 tid=0x00000000023d3800 nid=0x1d9c runnable

"GC task thread#1 (ParallelGC)" os_prio=0 tid=0x00000000023d6000 nid=0x1d08 runnable

"VM Periodic Task Thread" os_prio=2 tid=0x00000000584a4800 nid=0x1e7c waiting on condition

JNI global references: 6


Found one Java-level deadlock:
=============================
"two":
  waiting to lock monitor 0x000000005700a958 (object 0x00000000d61578b0, a java.lang.Class),
  which is held by "one"
"one":
  waiting to lock monitor 0x000000005700bdf8 (object 0x00000000d615b148, a [Ljava.lang.String;),
  which is held by "two"

Java stack information for the threads listed above:
===================================================
"two":
        at testweb.TestService$2.run(TestService.java:35)
        - waiting to lock <0x00000000d61578b0> (a java.lang.Class for testweb.TestService)
        - locked <0x00000000d615b148> (a [Ljava.lang.String;)
"one":
        at testweb.TestService$1.run(TestService.java:19)
        - waiting to lock <0x00000000d615b148> (a [Ljava.lang.String;)
        - locked <0x00000000d61578b0> (a java.lang.Class for testweb.TestService)

Found 1 deadlock.


分享到:
评论

相关推荐

    Java 死锁示例性源代码

    本源代码是博客《Java 多线程编程之七:死锁(附源代码)》附带的实例性源代码。原博客链接地址:http://blog.csdn.net/defonds/archive/2010/01/26/5258120.aspx。

    java实现死锁的示例代码

    本篇文章主要介绍了java实现死锁的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    java线程死锁代码示例

    主要介绍了java线程死锁代码示例,分享了一个简单线程死锁的例子,需要的朋友可以参考下。

    Java多线程死锁示例

    主要介绍了Java多线程死锁,结合实例形式分析了Java多线程出现死锁的相关原因与操作注意事项,需要的朋友可以参考下

    java中常见的死锁以及解决方法代码

    主要介绍了java中常见的死锁以及解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    详解java中产生死锁的原因及如何避免

    主要介绍了java中产生死锁的原因及如何避免,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Java线程死锁实例及解决方法

    主要介绍了Java线程死锁实例及解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Java多线程管理示例

    里面提供Java多线程的概念,同步,死锁,wait/nofity机制的示例《生产者与消费者》例子

    JavaMultiThreadingExamples:带有中文注释的基本Java多线程示例

    #Java多线程示例-Java多线程应用实例 1- Java多线程:启动线程 2- Java多线程:易失性–基本线程通信 3- Java多线程:同步 4- Java多线程:锁定对象 5- Java多线程:线程池 6- Java多线程:倒计时闩锁 7- Java多线程...

    Java范例开发大全 (源程序)

    第1篇 Java编程基础  第1章 Java开发环境的搭建(教学视频:9分钟) 2  1.1 理解Java 2  1.2 搭建Java所需环境 3  1.2.1 下载JDK 3  1.2.2 安装JDK 4  1.2.3 配置环境 5  1.2.4 测试JDK配置是否成功 7...

    Java-Deadlocks-Detection-Sample:如何在 Java 中以编程方式检测死锁的简单示例

    如何使用 Java 以编程方式检测死锁的简单示例。 有关详细信息,请参阅 。

    Java 多线程死锁的产生以及如何避免死锁

    主要介绍了Java 多线程死锁的产生以及如何避免死锁,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    JAVA上百实例源码以及开源项目

    Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,...

    JAVA上百实例源码以及开源项目源代码

    Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,...

    利用Python+Java调用Shell脚本时的死锁陷阱详解

    主要给大家介绍了关于利用Python+Java调用Shell脚本时的死锁陷阱的相关资料,文章通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

    图解java多线程设计模式

    编写了300个示例程序来实现设计模式,掌握这些设计模式可以避免程序发生死锁、节省资源、提高性能等,让多线程程序更高效。java.util.concurrent包、synchronized关键字、Swing框架、Java内存模型等内容也均有涉及,...

    java开源包4

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包101

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包11

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

Global site tag (gtag.js) - Google Analytics