【发布时间】:2013-08-03 07:32:54
【问题描述】:
代码 sn-p - 1
class RequestObject implements Runnable
{
private static Integer nRequests = 0;
@Override
public void run()
{
synchronized (nRequests)
{
nRequests++;
}
}
}
代码 sn-p - 2
class RequestObject implements Runnable
{
private static Integer nRequests = 0;
private static Object lock = new Object();
@Override
public void run()
{
synchronized (lock)
{
nRequests++;
}
}
}
虽然第二个代码 sn-p 工作正常而不会导致任何竞争条件,但第一个代码在同一类 (RequestObject) 的不同实例之间同步对静态数据成员的访问并不成功。有人可以对此进行更多说明。我想了解为什么第一种方法不起作用。
我最初的实现是第一个。后来在https://stackoverflow.com/a/2120409/134387看到的。
【问题讨论】:
-
因为
Integer是不可变的。增加它并没有按照您的想法进行 -
也不要使用整数,使用
int -
这是一个不同的问题。请提出一个新问题。
-
@JensSchauder,完成。 stackoverflow.com/q/18041568/134387
标签: java multithreading synchronization