コード スニペット - 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++;
}
}
}
2 番目のコード スニペットは競合状態を引き起こすことなく正常に動作していますが、最初のコード スニペットは、同じクラス (RequestObject) の異なるインスタンス間で静的データ メンバーへのアクセスを同期することに成功していません。誰かがこれにもっと光を当てることができますか. 最初のアプローチが機能しない理由を理解したいと思います。
私の元の実装は最初のものです。後でhttps://stackoverflow.com/a/2120409/134387で見ました。