我讀到以下類不是線程安全的,因爲線程可能讀取不一致的數據,因爲線程有機會讀取real
的縮放版本和imaginary
的未縮放版本。但我不知道如何。Java:使用同步方法的類中的線程安全
我的印象是,如果一個線程獲取的鎖,並在scale()
方法,沒有其他的線程可以在同一時間在getReal()
或getImaginary()
方法,使其他線程不能讀「半比例」的複數。這不正確嗎?
class Complex
{
double real;
double imaginary;
synchronized void scale(double scaleFactor)
{
real = real * scaleFactor;
imaginary = imaginary * scaleFactor;
}
synchronized double getReal()
{
return real;
}
synchronized double getImaginary()
{
return imaginary;
}
}
爲了防止您的答案顯而易見,我會補充說,同步關鍵字應該被刪除,因爲不可變性不需要鎖。 – alpian 2010-10-03 21:08:09