Java死锁检测
来源:互联网 发布:论坛源码下载 编辑:程序博客网 时间:2024/06/08 06:55
ThreadMXBean
常用方法:
/** ThreadMXBean常用方法test */ ThreadMXBean threadMXBean= ManagementFactory.getThreadMXBean(); int count=threadMXBean.getThreadCount();//获取当前线程数目 System.out.println("当前线程数为:"+count); long[] threadIds=threadMXBean.getAllThreadIds(); System.out.println("当前线程id们为:"+ JSONObject.toJSONString(threadIds)); ThreadInfo[] threadInfos=threadMXBean.getThreadInfo(threadMXBean.getAllThreadIds()); System.out.println("当前线程的信息:"+JSONObject.toJSONString(threadInfos)); System.out.println("是否支持测量线程执行时间:"+threadMXBean.isCurrentThreadCpuTimeSupported());
/** * 死锁检测工具 * Created by liuhuichao on 2017/6/21. */public class DeadLockCheckChecker { private final static ThreadMXBean mbean=ManagementFactory.getThreadMXBean(); final static Runnable deadLockCheck=new Runnable() { @Override public void run() { while (true){ long[] deadLockedThreadIds=mbean.findDeadlockedThreads(); if(deadLockedThreadIds!=null){ ThreadInfo[] threadInfos=mbean.getThreadInfo(deadLockedThreadIds); for(Thread t: Thread.getAllStackTraces().keySet()){ for(int i=0;i<threadInfos.length;i++){ if(t.getId()==threadInfos[i].getThreadId()){ t.interrupt(); } } } } try { Thread.sleep(1000); } catch (InterruptedException e) { } } } }; public static void check(){ Thread thread=new Thread(deadLockCheck); thread.setDaemon(true); thread.start(); }}
可中断性测试:
/**ReentrantLock可中断性测试 * Created by liuhuichao on 2017/6/20. */public class ReentrantLockInterruptedTest implements Runnable { public static ReentrantLock lock1=new ReentrantLock(); public static ReentrantLock lock2=new ReentrantLock(); int lock; /** * 控制加锁顺序,方便构造死锁 * @param lock */ public ReentrantLockInterruptedTest(int lock) { this.lock = lock; } @Override public void run() { try{ if(lock==1){ lock1.lockInterruptibly(); try{ Thread.sleep(500); }catch (InterruptedException e){} lock2.lockInterruptibly(); }else{ lock2.lockInterruptibly(); try{ Thread.sleep(500); }catch (InterruptedException e){} lock1.lockInterruptibly(); } } catch (InterruptedException e) { e.printStackTrace(); }finally { if(lock1.isHeldByCurrentThread()){ lock1.unlock(); } if(lock2.isHeldByCurrentThread()){ lock2.unlock(); } System.out.println("线程退出:"+Thread.currentThread().getId()); } } public static void main(String[] args) throws Exception{ ReentrantLockInterruptedTest l1=new ReentrantLockInterruptedTest(1); ReentrantLockInterruptedTest l2=new ReentrantLockInterruptedTest(2); Thread t1=new Thread(l1); Thread t2=new Thread(l2); t1.start(); t2.start(); Thread.sleep(1000); DeadLockCheckChecker.check(); }}
阅读全文
0 0
- java死锁检测
- java死锁检测
- Java死锁检测
- java 线程死锁的检测
- jps,jstack检测java死锁
- Java中死锁的检测
- Java死锁示例及检测
- Java 多线程 (PART XIII) 死锁和检测死锁
- java多线程系列:死锁及检测
- 检测死锁
- 检测死锁
- Java虚拟机工具之堆栈跟踪工具jstack检测死锁
- 死锁模拟和检测
- SQL检测死锁
- ------如何检测死锁---------
- 如何检测死锁
- 检测和结束死锁
- 002 死锁检测
- Python+ImageMagick实现多图片合并为一个pdf文件
- Maven之——插件目标及绑定、命令行调用插件、目标前缀(插件前缀解析策略)、插件解析运行机制
- 判断素数
- 2017考研复试,绕开让你失败的致命错误
- 软件工程复习资料(三)
- Java死锁检测
- Android----内容提供者
- 安卓图片按钮点击切换
- 2017考研复试通关一定要解决的8个问题
- 如何写一个类
- bom编程
- 分布式爬虫学习
- 2017考研复试:过来人总结经验教训
- [LeetCode] 113. Path Sum II