我读到以下类不是线程安全的,因为线程可能读取不一致的数据,因为线程有机会读取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