我正在通过Java书籍工作并发现以下问题。同步方法对此持有锁
在下面的代码中,类是线程安全吗?
public class Queen
{
public int x;
public synchronized int getX()
{
return x;
}
public synchronized void setX(int x)
{
this.x = x;
}
public static void main(String args[])
{
}
}
我的答案是肯定的,因为只有两个方法,都同步,因此,尽管他们中的一个运行时,它持有对象的锁,其他不能运行。
但是,官方回答是NO,并且解释是变量int x是公共的,可以由线程修改,而另一个线程在同步方法之一内。那可能吗?? synchronized方法是否保留了这个线程,意味着该对象中的所有内容都包含公共变量?
是的,这是可能的。 'synchronized'方法只能防止在同一个对象上同时执行** other **'synchronized'方法。 – 2014-12-06 19:23:32