Java 是否可能使用两个锁和一个方法死锁,而所有其他方法只获取一个锁?
使用下面的代码是否会有死锁的风险?有没有更好/更安全的方法?起初我想把两个锁组合成一个锁,但也许我在这里做得太努力了,下面的代码是安全和正确的Java 是否可能使用两个锁和一个方法死锁,而所有其他方法只获取一个锁?,java,multithreading,concurrency,locking,cas,Java,Multithreading,Concurrency,Locking,Cas,使用下面的代码是否会有死锁的风险?有没有更好/更安全的方法?起初我想把两个锁组合成一个锁,但也许我在这里做得太努力了,下面的代码是安全和正确的 public void method1() { lock1.lock(); //... lock1.unlock(); } public void method2() { lock2.lock(); //... lock2.unlock(); } public void method3() { loc
public void method1() {
lock1.lock();
//...
lock1.unlock();
}
public void method2() {
lock2.lock();
//...
lock2.unlock();
}
public void method3() {
lock1.lock();
lock2.lock();
// ...
lock2.unlock();
lock1.unlock();
}
在这种情况下,
method3
无法在未锁定lock1
的情况下锁定lock2
,因此该方法中不会发生死锁。请注意,这不会阻止在lock1
之前未显示的获取lock2
的某种附加代码,例如
public void method4() {
lock2.lock();
lock1.lock();
// ...
lock1.unlock();
lock2.unlock();
}
当与
method3
同时运行时,这可能会产生死锁。这永远不会死锁,不会。死锁只会发生在两个线程中,每个线程都有两个或多个锁发生故障。@Gary您能提供一个使用上述方法的示例,在其中您可以产生死锁吗?您了解什么是死锁吗?在你的代码中,你怀疑在哪里会发生这种情况?