代码段 - 1
class RequestObject implements Runnable
{
private static Integer nRequests = 0;
@Override
public void run()
{
synchronized (nRequests)
{
nRequests++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
代码段 - 2
class RequestObject implements Runnable
{
private static Integer nRequests = 0;
private static Object lock = new Object();
@Override
public void run()
{
synchronized (lock)
{
nRequests++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
虽然第二个代码片段工作正常而没有引起任何竞争条件,但第一个代码片段不能成功同步对同一个类的不同实例(RequestObject)之间的静态数据成员的访问.有人可以对此有所了解吗?我想了解为什么第一种方法不起作用.
我最初的实现是第一个.后来我在/sf/answers/148428661/中看到了.