假设您有以下代码:
public int getSpeedX() {
speedLock.lock();
try {
return speedX;
} finally {
speedLock.unlock();
}
}
public void setSpeedX(int x) {
speedLock.lock();
try {
speedX = x;
} finally {
speedLock.unlock();
}
}
返回速度X好吗?或应该是:
public int getSpeedX() {
int temp;
speedLock.lock();
try {
temp = speedX;
} finally {
speedLock.unlock();
}
return temp;
}
哪个是对的?或者它们是等价的吗?
答案 0 :(得分:6)
它们是等价的。无论块退出的方式如何(例如流控制输出底部,返回语句或异常),都会执行finally
块中的任何内容。
答案 1 :(得分:1)
答案 2 :(得分:0)
java.util.concurrent.locks.ReentrantReadWriteLock中
答案 3 :(得分:0)
我将选择第一个保持getter签名干净整洁(无参数)的方法。
我会在那里写一个小注释来记录finally
块总是被执行的事实。
为了记录,我实际上从我的同事那里得到了完全相同的问题,从那时起,我总是尝试评论这种编码以节省我的代码阅读器的一些谷歌搜索时间。