Mat*_*ord 28 java concurrency locking volatile reentrancy
我的问题是指使用ReentrantLock是否保证字段的可见性与synchronized关键字提供的方面相同.
例如,在下面的类A中,当使用synchronized关键字时,字段sharedData不需要声明为volatile.
class A
{
private double sharedData;
public synchronized void method()
{
double temp = sharedData;
temp *= 2.5;
sharedData = temp + 1;
}
}
Run Code Online (Sandbox Code Playgroud)
但是对于使用ReentrantLock的下一个示例,是否必须在该字段上使用volatile关键字?
class B
{
private final ReentrantLock lock = new ReentrantLock();
private volatile double sharedData;
public void method()
{
lock.lock();
try
{
double temp = sharedData;
temp *= 2.5;
sharedData = temp + 1;
}
finally
{
lock.unlock();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我知道无论如何使用volatile关键字只会造成极小的性能损失,但我仍然希望正确编码.
| 归档时间: |
|
| 查看次数: |
2518 次 |
| 最近记录: |