コードスニペット - 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で見た。
「整数」は不変であるためです。インクリメントすることはあなたの考えをしていません –
も整数を使用せず、 'int'を使用してください –
これは別の質問です。新しい質問にしてください。 @JensSchauder、完了。 –