代碼段 - 1同步訪問不可變整數對象
class RequestObject implements Runnable
{
private static Integer nRequests = 0;
@Override
public void run()
{
synchronized (nRequests)
{
nRequests++;
}
}
}
代碼段 - 2
class RequestObject implements Runnable
{
private static Integer nRequests = 0;
private static Object lock = new Object();
@Override
public void run()
{
synchronized (lock)
{
nRequests++;
}
}
}
雖然第二代碼段,而不會造成任何競爭條件工作正常,則第一個在同步類(RequestObject)的不同實例之間同步對靜態數據成員的訪問方面沒有成功。有人可以更多地指出這一點。我想了解爲什麼第一種方法不起作用。
我原來的實現是第一個。後來我在https://stackoverflow.com/a/2120409/134387看到。
因爲'整數'是不可變的。增加它不是做你認爲 –
也不使用Integer,使用'int' –
這是一個不同的問題。請讓它成爲一個新問題。 –