代码片段 - 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看到。