23
我的問題涉及ReentrantLock的使用是否保證字段的可見性與synchronized關鍵字提供的方面相同。通過ReentrantLock訪問字段是否需要volatile關鍵字?
例如,在下面的類甲,場sharedData不需要作爲同步關鍵字用於聲明揮發性。
class A
{
private double sharedData;
public synchronized void method()
{
double temp = sharedData;
temp *= 2.5;
sharedData = temp + 1;
}
}
對於使用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();
}
}
}
我知道無論如何使用volatile關鍵字只會影響性能,但我仍然希望能夠正確編寫代碼。
這個建議是否適用於由於現場吊裝而引起的「場(場)」? – Pod 2017-08-21 09:49:16
@Pod:沒有關於'while'循環如何與鎖相互作用的更多具體細節,這是不可能的。你可能想用一個具體的例子來創建一個新的問題。 – 2017-08-21 09:50:35