Java检测死锁案例

网友投稿 244 2022-12-31

Java检测死锁案例

导致死锁的程序

package com.study.train;

import java.io.IOException;

import java.lang.management.ManagementFactory;

import java.lang.management.ThreadInfo;

import java.lang.management.ThreadMXBean;

import java.lang.reflect.Field;

import java.util.*;

import java.util.concurrent.ArrayBlockingQueue;

import java.util.concurrent.ConcurrentHashMap;

import java.util.concurrent.FutureTask;

import java.util.concurrent.LinkedBlockingQueue;

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

import static java.lang.Thread.yield;

public class Main extends Thread{

private Object o1;

private Object o2;

Main(Object oa,Object ob,String name) {

super(name);

ohttp://1 = oa;

o2 = ob;

}

@Override

public void run() {

synchronized (o1) {

System.out.println("thread: "+Thread.currentThread().getName() + " get lock");

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

synchronized (o2) {

System.out.println("two lock is get");

}

}

}

public static wfcyxcEAYvoid main(String[] args) throws InterruptedException {

Object oj1 = new Object();

Object oj2 = new Object();

Main m1 = new Main(oj1,oj2,"thread1");

Main m2 = new Main(oj2,oj1,"thread2");

m1.start();

m2.start();

m1.join();

m2.join();

}

}

1.jconsole工具检测

2. jsp+jstack

linux上可以先使用top | grep java,查找忙的线程pid,然后拿到该线程id进行分析,jstakc pid。

避免死锁的方法

1.尽量避免使用多个锁

2.如果一定要使用多个锁,可以考虑顺序获取锁,这样就类似破坏了环路等待条件

3.使用尝试获取锁的方法,如果无法获取,就将本身已经获取到的wfcyxcEAY锁释放,类似破坏不可剥夺条件。

银行家算法属于检测是不是会存在死锁,这种做法实际上也是破坏环路等待条件的发生。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:三道java新手入门面试题,通往自由的道路
下一篇:怎么用圆通快递物流查询单号(圆通快递如何查询单号)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~