产生死锁的代码:
package neicun; public class DeadLockTest { static class SynAddRunnable implements Runnable { private Object a, b; public SynAddRunnable(Object a, Object b) { this.a = a; this.b = b; } @Override public void run() { synchronized (a) { try { Thread.currentThread().sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (b) { System.out.println(a.toString() + " " + b.toString()); } } } } public static void main(String[] args) { String a = new String("a"); String b = new String("b"); new Thread(new SynAddRunnable(a, b)).start(); new Thread(new SynAddRunnable(b, a)).start(); } }
打开jvisualvm,右击选中的java进程,选中->Trace application
在打开的窗口里面输入以下代码:
/* BTrace Script Template */ import com.sun.btrace.annotations.*; import static com.sun.btrace.BTraceUtils.*; @BTrace public class TracingScript { /* put your code here */ @OnTimer(4000) public static void print(){ deadlocks(); } }
上面代码的依旧就是每4秒钟检查以下死锁,dealdlocks方法是BTrace工具提供的静态方法,输出的结果如下:
从结果可知在代码22行处,因为Thread-0需要持有的锁已经被Thread-1所持有,而同样的Thread-1需要持有的锁已经被Thread-0锁持有。
相关推荐
在开发软件过程中, 使用多线程技术同步,经常出现死锁,这个工具可以检查 死锁发生锁在那个线程中了。
这个对于定位死锁很重要,很简单。在运行java控制台的时候,都会用 java -classpath XXX org.XXX. main 这种方法 在管理控制台中按下ctrl + break 就能从界面上获得及时的堆栈信息了,但是这些信息很不方便。那么又...
在实际操作中,我们需要根据LockCop提供的信息,检查代码中是否有不当的资源获取顺序,或者是否在等待资源时没有设置超时等可能导致死锁的情况。 总的来说,了解并掌握如何检测和处理死锁是每个多线程编程人员必备...
3. 开启监控:启动JCarder的监控功能,它会在后台持续检查死锁情况。 4. 收集报告:当JCarder检测到潜在的死锁时,会生成报告,包括死锁线程的详细信息、锁的持有情况以及线程间的等待关系图。 5. 分析和解决:...
标题 "bTrace跟踪线程堆栈" 涉及到的是在Java开发中对线程堆栈进行监控和分析的技术,主要使用了开源工具bTrace。bTrace是一款强大的、无侵入式的Java运行时代码注入工具,允许开发者在运行中的Java应用上动态添加...
2. **脚本编写**:BTrace使用一种简单的脚本语言,基于Groovy,开发者可以编写脚本来定义想要追踪的行为。例如,可以追踪方法调用、记录日志、计算性能指标等。 3. **安全机制**:BTrace有内置的安全策略,以防止不...
根据提供的文件信息,我们可以深入探讨如何检查Oracle数据库的性能情况,包括检查数据库的等待事件、检查和处理死锁等关键方面。以下是对这些知识点的详细解释: ### 1. 检查Oracle数据库状态 #### 1.1. 查看...
### 教您如何检查Oracle死锁 #### 一、数据库死锁的现象 在日常工作中,当我们使用Oracle数据库进行数据操作时,可能会遇到一种特殊的情况——死锁。这种现象通常表现为程序在执行过程中突然停止响应,既无法继续...
- 使用死锁预防策略:如预分配资源,使用行版本控制,或者设置合适的事务隔离级别。 **6. SQL死锁查询工具** "6.查询阻塞进程SQL工具"可能是指特定的数据库管理工具或脚本,用于实时监控和诊断SQL数据库中的死锁和...
在实验中,我们使用互斥锁来避免死锁的发生。互斥锁是指一种机制,它可以防止多个进程同时访问同一个共享资源。通过使用互斥锁,我们可以避免死锁的发生,从而提高系统的稳定性。 理解进程、线程和死锁的概念对于...
基于java的开发源码-多线程程序死锁检查 JCarder.zip 基于java的开发源码-多线程程序死锁检查 JCarder.zip 基于java的开发源码-多线程程序死锁检查 JCarder.zip 基于java的开发源码-多线程程序死锁检查 JCarder.zip ...
2. 使用exec master..xp_lockinfo 1, 0命令来查询死锁的进程信息,并杀掉死锁的进程。 3. 使用exec master..xp_lockinfo 2, 0命令来查询死锁的进程信息,并显示死锁的进程的详细信息。 SQL Server死锁的解除方法也...
在SQL Server数据库管理系统中,死锁是一个...总的来说,通过监控未提交事务、查找阻塞和死锁的SQL语句,以及适时使用`KILL`命令,我们可以有效地管理和解决SQL Server中的死锁问题,确保数据库系统的稳定和高效运行。
Oracle数据库解决死锁是指在Oracle数据库中出现的死锁问题,通过使用PL/SQL语句手动解决死锁问题。死锁是当多个事务在等待其他事务释放资源时,导致系统无法继续执行的现象。 在Oracle数据库中,死锁可能是由多种...
在本实现中,我们将使用死锁检测算法来检测系统中的死锁。该算法通过反复查找进程等待表和资源分配表,来确定进程对资源的请求是否导致形成环路,若是,便确定出现死锁。 首先,我们需要输入两个文件:资源分配表...
- 锁粒度不一致:行级锁与表级锁的混合使用可能导致死锁。 2. **死锁的检测与解决**: - InnoDB存储引擎内置了死锁检测机制,当检测到死锁时,会终止一个事务,并返回错误信息(错误代码1213)。 - 用户可以通过...
oracle死锁问题查询代码,仅供参考,有问题大家一起交流
从进程同步的概念可以知道,当并发进程需要竞争使用资源或需要相互协作向前推进时,如果不采取同步措施,或同步措施不恰当,则很容易导致并发进程不能向前推进而陷入僵局,即死锁现象。死锁是发生在一组相互竞争或...
1. **识别死锁**:使用DB2的系统视图如SYSPROC.ADMIN_GET_DEADLOCKS,或通过错误日志确定哪些事务陷入死锁。 2. **回滚事务**:手动或自动回滚其中一个事务,释放其持有的锁,从而结束死锁状态。 3. **分析原因**:...