linux cpu占用率如何看
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~