一、怎么防止死锁发生
死锁是指两个或多个进程持有资源,但是它们都在等待其他进程释放它们所需要的资源,从而导致所有的进程都无法向前执行的情况。防止死锁的发生需要从代码编写、资源获取等多个方面入手,下面分别介绍。
二、列举死锁的各种防止策略
1、避免使用多个锁或资源的情况,如果需要使用,可以按照统一的顺序获取它们,避免持有不同的资源。
class BankAccount {
private Double balance;
private Lock lock1 = new ReentrantLock();
private Lock lock2 = new ReentrantLock();
public void transfer(BankAccount to, Double amount){
lock1.lock();
to.lock2.lock();
try{
...
} finally {
to.lock2.unlock();
lock1.unlock();
}
}
}
2、利用超时机制,当线程尝试获取锁一定时间后仍然无法成功,就会释放所有的锁。
class BankAccount {
private Double balance;
private Lock lock1 = new ReentrantLock();
private Lock lock2 = new ReentrantLock();
public void transfer(BankAccount to, Double amount){
boolean success = false;
while(!success){
if(lock1.tryLock()){
if(to.lock2.tryLock()){
success = true;
} else {
lock1.unlock();
}
}
...
}
}
}
3、使用死锁检测器检测潜在死锁,并进行解决。
public class DeadlockDetector {
private ThreadMXBean bean = ManagementFactory.getThreadMXBean();
public void detectDeadlock(){
long[] threadIds = bean.findDeadlockedThreads();
if(threadIds != null){
ThreadInfo[] infos = bean.getThreadInfo(threadIds);
for(ThreadInfo info : infos){
System.out.println("发现死锁:" + info.getThreadName());
...
}
}
}
}
三、什么是死锁怎么防止死锁
死锁是指两个或多个进程持有资源,但是它们都在等待其他进程释放它们所需要的资源,从而导致所有的进程都无法向前执行的情况。防止死锁需要从资源的使用、获取等多个方面避免。
四、下列关于死锁的防止叙述正确的是
1、可以使用超时机制来避免死锁的发生,当线程尝试获取锁一定时间后仍然无法成功,就会释放所有的锁。
2、只需要按照统一的顺序获取锁,就可以避免死锁的情况。
3、使用死锁检测器可以检测潜在死锁,并进行解决。
上述均为正确的叙述,但是防止死锁还需要从多个方面考虑,比如资源的分配、释放等。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/180173.html
微信扫一扫
支付宝扫一扫