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 多线程编程之七:死锁(附源代码)》附带的实例性源代码。原博客链接地址:http://blog.csdn.net/defonds/archive/2010/01/26/5258120.aspx。
本篇文章主要介绍了java实现死锁的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
主要介绍了java线程死锁代码示例,分享了一个简单线程死锁的例子,需要的朋友可以参考下。
主要介绍了Java多线程死锁,结合实例形式分析了Java多线程出现死锁的相关原因与操作注意事项,需要的朋友可以参考下
主要介绍了java中常见的死锁以及解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
主要介绍了java中产生死锁的原因及如何避免,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
主要介绍了Java线程死锁实例及解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
里面提供Java多线程的概念,同步,死锁,wait/nofity机制的示例《生产者与消费者》例子
#Java多线程示例-Java多线程应用实例 1- Java多线程:启动线程 2- Java多线程:易失性–基本线程通信 3- Java多线程:同步 4- Java多线程:锁定对象 5- Java多线程:线程池 6- Java多线程:倒计时闩锁 7- 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 以编程方式检测死锁的简单示例。 有关详细信息,请参阅 。
主要介绍了Java 多线程死锁的产生以及如何避免死锁,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,...
Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,...
主要给大家介绍了关于利用Python+Java调用Shell脚本时的死锁陷阱的相关资料,文章通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
编写了300个示例程序来实现设计模式,掌握这些设计模式可以避免程序发生死锁、节省资源、提高性能等,让多线程程序更高效。java.util.concurrent包、synchronized关键字、Swing框架、Java内存模型等内容也均有涉及,...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...