ReentrantLock同步getter和setter

use*_*980 4 java concurrency multithreading locking reentrantlock

假设您有以下代码:

public int getSpeedX() {
    speedLock.lock();
    try {
        return speedX;
    } finally {
        speedLock.unlock();
    }
}

public void setSpeedX(int x) {
    speedLock.lock();
    try {
        speedX = x;
    } finally {
        speedLock.unlock();
    }
}
Run Code Online (Sandbox Code Playgroud)

返回速度X好吗?或应该是:

public int getSpeedX() {
    int temp;
    speedLock.lock();
    try {
        temp = speedX;
    } finally {
        speedLock.unlock();
    }
    return temp;
}
Run Code Online (Sandbox Code Playgroud)

哪个是对的?或者他们是等同的?

Joh*_*ger 6

它们是等价的.finally无论块如何退出(例如,流控制输出底部,返回语句或异常),块中的任何内容都会被执行.