我正在通過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