gpt4 book ai didi

java - Java中的多锁单解锁?

转载 作者:行者123 更新时间:2023-12-01 10:44:05 24 4
gpt4 key购买 nike

我正在实现我的 RunnableFuture 版本,并且需要在 run() 方法末尾原子化状态更改。状态字段的具体列表并不重要。 Runnable 可以通过异常或正常完成。因此它可以访问 try block 的尾部,也可以不访问。我还可以访问 catch block ,然后访问 finally block 。

所有这 3 个地方都应该以原子方式更改,但我看不到“ block 间”锁定结构。因此,我使用 getHoldCount() 来决定是否调用 lock():

public void run() {

Runnable runnable;

lock.lock();
try{
runnable = this.runnable;
done = false;
running = true;
result = null;
}
finally {
lock.unlock();
}

try {
if( !cancel ) {
runnable.run();
}

if( lock.getHoldCount()==0 ) lock.lock();
exception = null;
result = finalResult;

}
catch (Exception e) {

if( lock.getHoldCount()==0 ) lock.lock();

exception = e;
result = null;

}
finally {
if( lock.getHoldCount()==0 ) lock.lock();
done = true;
running = false;

lock.unlock();
}

}

这是正确的吗?有更好的方法吗?

最佳答案

为什么不链接 try-finally 语句:

try {
lock.lock();
// Do something ...
} finally {
try {
// Do more ...
} finally {
try {
// Do more ...
} finally {
lock.unlock();
}

}

关于java - Java中的多锁单解锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34296314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com