首先,编写一个死锁程序

 package deadlock;

 public class testJstack {
final static Object resource_1 = new Object();
final static Object resource_2 = new Object(); public static void main(String[] args) {
Thread t1 = new Thread("t1") {
public void run() {
synchronized (resource_1) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
}
System.out.println("locked resource_1");
synchronized (resource_2) {
System.out.println("thread t1 done.");
}
}
}
}; Thread t2 = new Thread("t2") {
public void run() {
synchronized (resource_2) {
System.out.println("locked resource_2");
synchronized (resource_1) {
System.out.println("thread t2 done.");
}
}
}
};
t1.start();
t2.start();
}
}

程序运行结果是:

lock resource_2
lock resource_1

接下来在终端中输入jsp查看当前运行的java程序:

7480 testJstack
13420 Jps

获取testJstack的进程ID为7480.然后使用命令:

jstack -l 7480 >deadlock.jstack

将jstack检测结果放入文件deadlock.jstack。使用vim查看该文件:

java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
- None java.lang.Thread.State: RUNNABLE java.lang.Thread.State: BLOCKED (on object monitor)
at testJstack$2.run(testJstack.java:29)
- waiting to lock <0x8c087670> (a java.lang.Object)
- locked <0x8c087678> (a java.lang.Object) java.lang.Thread.State: BLOCKED (on object monitor)
at testJstack$1.run(testJstack.java:15) Locked ownable synchronizers:
- None java.lang.Thread.State: RUNNABLE Locked ownable synchronizers:
- None java.lang.Thread.State: RUNNABLE Locked ownable synchronizers:
java.lang.Thread.State: RUNNABLE
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- locked <0x8c050b30> (a java.lang.ref.ReferenceQueue$Lock) Locked ownable synchronizers:
- None - waiting on <0x8c050a30> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:485)
- locked <0x8c050a30> (a java.lang.ref.Reference$Lock) Locked ownable synchronizers:
"VM Thread" prio=10 tid=0x0807e800 nid=0x260c runnable JNI global references: 576 Found one Java-level deadlock:
=============================
"t2":
which is held by "t1"
"t1":
which is held by "t2" Java stack information for the threads listed above:
===================================================
"t2":
at testJstack$2.run(testJstack.java:29)
- waiting to lock <0x8c087670> (a java.lang.Object)
- locked <0x8c087678> (a java.lang.Object)
"t1":
at testJstack$1.run(testJstack.java:15)
- waiting to lock <0x8c087678> (a java.lang.Object)
- locked <0x8c087670> (a java.lang.Object) Found 1 deadlock.

java中在linux下利用jstack检测死锁的更多相关文章

  1. 【java】 linux下利用nohup后台运行jar文件包程序

    Linux 运行jar包命令如下: 方式一: java -jar XXX.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 ...

  2. 【调试】Linux下超强内存检测工具Valgrind

    [调试]Linux下超强内存检测工具Valgrind 内容简介 Valgrind是什么? Valgrind的使用 Valgrind详细教程 1. Valgrind是什么? Valgrind是一套Lin ...

  3. 嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误

    嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误 2015-05-27 14:19 184人阅读 评论(0) 收藏 举报  分类: 嵌入式(928)  一般察看函数运行时堆栈的 ...

  4. linux下利用openssl来实现证书的颁发(详细步骤)--转载和修改

    原文地址:http://www.cnblogs.com/firtree/p/4028354.html linux下利用openssl来实现证书的颁发(详细步骤) 1.首先需要安装openssl,一个开 ...

  5. 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能

    题目:编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能 要求:MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bin 用来把文本文件(内容为十 ...

  6. 补交 20155202 蓝墨云班课 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能

    蓝墨云班课 编写MyCP.java 要求: 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX ...

  7. Linux下利用script命令录制并回放终端会话

    Linux下利用script命令录制并回放终端会话 核心命令 script 和 scriptreplay 录制屏幕 script -t 2>timescript typescript 命令解释: ...

  8. 【ARM-Linux开发】【CUDA开发】【视频开发】关于Linux下利用GPU对视频进行硬件加速转码的方案

    最近一直在研究Linux下利用GPU进行硬件加速转码的方案,折腾了很久,至今没有找到比较理想的硬加速转码方案.似乎网上讨论这一方案的文章也特别少,这个过程中也进行了各种尝试,遇到很多具体问题,以下便对 ...

  9. linux下利用elk+redis 搭建日志分析平台教程

    linux下利用elk+redis 搭建日志分析平台教程 http://www.alliedjeep.com/18084.htm   elk 日志分析+redis数据库可以创建一个不错的日志分析平台了 ...

随机推荐

  1. WebForm在JS中从Dropdownlist添加数据,在C#段读取

    (1)页面设置和JS代码 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Def ...

  2. 四、java中的数组

    总结: 数组的特点: 1.存储的数据类型单一. 2.数组的大小不可变. 3.Arrays工具类.

  3. Win7\xp添加虚拟网Microsoft Loopback Adapter

    安装Microsoft Loopback Adapter 1 依次找到 打开“开始菜单”---“控制面板”---“添加硬件”的菜单选项如下图所示. 步骤阅读 2 如果没有“添加硬件”当然你也可以直接, ...

  4. 【leetcode❤python】Convert a Number to Hexadecimal

    #-*- coding: UTF-8 -*- class Solution(object):    hexDic={0:'0',1:'1',2:'2',3:'3',4:'4',5:'5',6:'6', ...

  5. 【leetcode❤python】350. Intersection of Two Arrays II

    #-*- coding: UTF-8 -*- class Solution(object):    def intersect(self, nums1, nums2):                ...

  6. UVA 10163 十六 Storage Keepers

    十六 Storage Keepers Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit ...

  7. BP神经网络求解异或问题(Python实现)

    反向传播算法(Back Propagation)分二步进行,即正向传播和反向传播.这两个过程简述如下: 1.正向传播 输入的样本从输入层经过隐单元一层一层进行处理,传向输出层:在逐层处理的过程中.在输 ...

  8. Burpsuite之Http Basic认证爆破

    有的时候经常遇到401.今天正好朋友问怎么爆破,也顺便记录一下 怕忘记了 referer:http://www.2cto.com/Article/201303/194449.html 看到Burpsu ...

  9. 访问者模式,visitor

    定义: 表示作用于某对象结构中的各个元素的操作. 可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 前提: 适用于数据结构(Element)相对稳定的系统,这样visitor中的方法就是稳定 ...

  10. splay学习

    今天学习了一下spaly..... 感觉除了比较难打,比较难调,但还是很好理解的啊.... 1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: ...