2.2.12多线程的死锁(jps命令、jstack命令)
来源:互联网 发布:怎么看电脑端口号 编辑:程序博客网 时间:2024/06/06 16:36
package cha02.execise28;/** * Created by sunyifeng on 17/10/1. */public class DealThread extends Thread { public String username; public Object lock1 = new Object(); public Object lock2 = new Object(); public void setFlag(String username) { this.username = username; } @Override public void run() { if (username.equals("a")) { // synchronized (lock1) { try { System.out.println("username=" + username); Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } // synchronized (lock2) { System.out.println("按照lock1->lock2的顺序执行"); } } } // if (username.equals("b")) { // synchronized (lock2) { try { System.out.println("username=" + username); Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } // synchronized (lock1) { System.out.println("按照lock2->lock1的顺序执行"); } } } }}
package cha02.execise28;/** * Created by sunyifeng on 17/10/1. */public class Run { public static void main(String[] args) { try { DealThread dealThread = new DealThread(); dealThread.setFlag("a"); // 线程1 Thread thread1 = new Thread(dealThread); thread1.start(); Thread.sleep(100); dealThread.setFlag("b"); // 线程2 Thread thread2 = new Thread(dealThread); thread2.start(); } catch (InterruptedException e) { e.printStackTrace(); } }}
运行结果:username=a
username=b
程序分析:出现死锁。进入JDK的bin目录,先后执行jps命令、jstack命令,查看结果。
MacBook-Pro:multi-thread sunyifeng$ jps
22599 Jps
22587 Launcher
22588 AppMain
MacBook-Pro:multi-thread sunyifeng$ jstack 22588
2017-10-12 23:30:52
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.101-b13 mixed mode):
"Attach Listener" #14 daemon prio=9 os_prio=31 tid=0x00007fa1f201b000 nid=0x360b waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"DestroyJavaVM" #13 prio=5 os_prio=31 tid=0x00007fa1f207a000 nid=0x1703 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Thread-2" #12 prio=5 os_prio=31 tid=0x00007fa1f10c7800 nid=0x5103 waiting for monitor entry [0x000070000134f000]
java.lang.Thread.State: BLOCKED (on object monitor)
at cha02.execise28.DealThread.run(DealThread.java:45)
- waiting to lock <0x00000007956ebe98> (a java.lang.Object)
- locked <0x00000007956ebea8> (a java.lang.Object)
at java.lang.Thread.run(Thread.java:745)
"Thread-1" #11 prio=5 os_prio=31 tid=0x00007fa1f181f000 nid=0x4f03 waiting for monitor entry [0x000070000124c000]
java.lang.Thread.State: BLOCKED (on object monitor)
at cha02.execise28.DealThread.run(DealThread.java:29)
- waiting to lock <0x00000007956ebea8> (a java.lang.Object)
- locked <0x00000007956ebe98> (a java.lang.Object)
at java.lang.Thread.run(Thread.java:745)
"Monitor Ctrl-Break" #9 daemon prio=5 os_prio=31 tid=0x00007fa1f2079800 nid=0x4d03 runnable [0x0000700001149000]
java.lang.Thread.State: RUNNABLE
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:409)
at java.net.ServerSocket.implAccept(ServerSocket.java:545)
at java.net.ServerSocket.accept(ServerSocket.java:513)
at com.intellij.rt.execution.application.AppMain$1.run(AppMain.java:79)
at java.lang.Thread.run(Thread.java:745)
"Service Thread" #8 daemon prio=9 os_prio=31 tid=0x00007fa1f2005000 nid=0x4903 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C1 CompilerThread2" #7 daemon prio=9 os_prio=31 tid=0x00007fa1f2823800 nid=0x4703 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread1" #6 daemon prio=9 os_prio=31 tid=0x00007fa1f2822800 nid=0x4503 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread0" #5 daemon prio=9 os_prio=31 tid=0x00007fa1f104e000 nid=0x4303 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Signal Dispatcher" #4 daemon prio=9 os_prio=31 tid=0x00007fa1f2801000 nid=0x320f runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Finalizer" #3 daemon prio=8 os_prio=31 tid=0x00007fa1f1048800 nid=0x3003 in Object.wait() [0x000070000092e000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x0000000795588ee0> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
- locked <0x0000000795588ee0> (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)
"Reference Handler" #2 daemon prio=10 os_prio=31 tid=0x00007fa1f2016000 nid=0x2e03 in Object.wait() [0x000070000082b000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x0000000795586b50> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:502)
at java.lang.ref.Reference.tryHandlePending(Reference.java:191)
- locked <0x0000000795586b50> (a java.lang.ref.Reference$Lock)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153)
"VM Thread" os_prio=31 tid=0x00007fa1f1046000 nid=0x2c03 runnable
"GC task thread#0 (ParallelGC)" os_prio=31 tid=0x00007fa1f1004000 nid=0x2403 runnable
"GC task thread#1 (ParallelGC)" os_prio=31 tid=0x00007fa1f200b800 nid=0x2603 runnable
"GC task thread#2 (ParallelGC)" os_prio=31 tid=0x00007fa1f200c000 nid=0x2803 runnable
"GC task thread#3 (ParallelGC)" os_prio=31 tid=0x00007fa1f200c800 nid=0x2a03 runnable
"VM Periodic Task Thread" os_prio=31 tid=0x00007fa1f181e000 nid=0x4b03 waiting on condition
JNI global references: 21
Found one Java-level deadlock:
=============================
"Thread-2":
waiting to lock monitor 0x00007fa1f181bca8 (object 0x00000007956ebe98, a java.lang.Object),
which is held by "Thread-1"
"Thread-1":
waiting to lock monitor 0x00007fa1f1819418 (object 0x00000007956ebea8, a java.lang.Object),
which is held by "Thread-2"
Java stack information for the threads listed above:
===================================================
"Thread-2":
at cha02.execise28.DealThread.run(DealThread.java:45)
- waiting to lock <0x00000007956ebe98> (a java.lang.Object)
- locked <0x00000007956ebea8> (a java.lang.Object)
at java.lang.Thread.run(Thread.java:745)
"Thread-1":
at cha02.execise28.DealThread.run(DealThread.java:29)
- waiting to lock <0x00000007956ebea8> (a java.lang.Object)
- locked <0x00000007956ebe98> (a java.lang.Object)
at java.lang.Thread.run(Thread.java:745)
Found 1 deadlock.
- 2.2.12多线程的死锁(jps命令、jstack命令)
- jps 、jstack命令详解
- jdk的jps jstat jstack jmap jhat命令
- 性能分析5~top命令、jps命令、jstack命令:分析多线程下HashMap卡死原因分析
- jps,jstack检测java死锁
- jvm调优-命令大全(jps jstat jmap jhat jstack jinfo)
- jvm调优-命令大全(jps jstat jmap jhat jstack jinfo)
- jvm系列(四):jvm调优-命令大全(jps jstat jmap jhat jstack jinfo)
- jvm系列(四):jvm调优-命令大全(jps jstat jmap jhat jstack jinfo)
- jdk6中的jps,jstack,jmap,jhat,jconsole命令
- jps、jinfo、jstat、jstack、jmap、jconsole等命令简介
- jps、jinfo、jstat、jstack、jmap、jconsole等命令简介
- jdk6中的jps,jstack,jmap,jhat,jconsole命令
- jps、jinfo、jstat、jstack、jmap、jconsole等命令简介
- jdk6中的jps,jstack,jmap,jhat,jconsole命令
- Java——命令jps、jstat、jmap、jstack、jhat、jinfo
- jps、jinfo、jstat、jstack、jmap、jconsole等命令简介
- 常用的jps命令
- Miller_Rabin素数测验
- spring mybatis 之MapperScannerConfigurer
- 【状压DP】【cofun1372】售货员难题
- Thymeleaf模板引擎的一些知识点
- Unity SteamVR插件集成
- 2.2.12多线程的死锁(jps命令、jstack命令)
- 【20171011】python_语言设计(6)程序设计方法与面向对象程序设计
- 2016算法第一次练习赛——C 斐波那契进阶
- MySQL索引类型总结和使用技巧以及注意事项
- C++STL之vector详解(转)
- Android 代码设置来电铃声
- Servlet登录传递注意事项
- 日记(周中)
- c语言 计算闰年