0

このクラスがマルチスレッド環境で使用され、100 個のスレッドがこのメソッドを同時に呼び出すとします。

ケース 1 : インスタンス メソッド

public class test {

  public int add(int a , int b ){

    return a+b ;
     }

}

ケース 2: 静的メソッド

public class test {

  public static int add(int a , int b ){

    return a+b ;
     }

}

どちらの場合もお答えください。

4

3 に答える 3

0

すべての変数がローカルであるため、同期は必要ありません。つまり、どの呼び出し元の間でも実際に変数が共有されることはありません。

これを行った場合、var cが共有されるため、同期が必要になります。最後の'returnc'でcが取得される前に、別のスレッドがすでにそれを変更している可能性があります。

public class test {

  int c = 0;

  public int addKeep(int a , int b ){
          c = a + b;
          return c;
     }
}

ここでの他の答えはそれを静的にすることを言います。まあ、それはあなたが何をする必要があるかに依存します。add(int a、int b)がサブクラスがオーバーライドできる動作である場合は、インスタンスメソッドとして保持します。それがMath.class自体の一部であった場合は、オーバーライドする必要がない可能性が高いため、静的にします。

于 2012-08-11T13:42:07.707 に答える
0

オブジェクトが変更可能で、読み取り更新操作を実行している場合は、ゲッターとセッターに同期ブロックを使用する必要があります(つまり、ミューテイティングメソッド)。

于 2012-08-11T13:44:33.147 に答える
0

状態/インスタンス変数を使用していないためsynchronize、メソッドまたはオブジェクトを使用する必要はありません。

友好的な提案:メソッドを静的にします。Ans はクラスでそれを呼び出します。

于 2012-08-11T13:38:44.617 に答える