代码段 - 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' –
这是一个不同的问题。请让它成为一个新问题。 –