2

次の2つのクラスがあります。

public class MyClass {

   public static void faceTheWorld(String Input){
      SafeClass sC = new SafeClass();
      sC.workWithInput(Input);
   }
}

public class SafeClass {
   public void workWithInput{String allInp)

   work with allInp...
}

私の質問はです。MyClass.FaceTheWorld() を同時に数回呼び出すと、常に SafeClass の新しいクラス インスタンスが作成されますか?それとも、'sC' という同じインスタンスを常に作成しようとしますか?

同じインスタンスを同時に作成しないようにするために、代わりにインスタンスの配列を作成する必要がありますか? これは Java ではどのように見えるでしょうか?

最終的に私が達成しようとしているのは、「入力」で FaceTheWorld を呼び出すと、「入力」がスレッドセーフであることを常に確認することです。たとえば、他のインスタンスはそれを変更/アクセスできません。

SafeClass を同期化すると、問題は解決しますか?

どうもありがとう

4

3 に答える 3

1

他のスレッド(クラスのメンバー、または静的変数)によって変更される可能性のある変数にアクセスしない限り、静的メソッド(または他のメソッド)で新しいインスタンスを作成するだけでは、競合状態は発生しません。各メソッドには、独自の変数スタックがあります。

そしてあなたの質問に具体的に:

常に新しいインスタンスを作成します。

于 2013-03-10T16:48:35.620 に答える
1

毎回新しいインスタンスが作成されるので、スレッドセーフである必要があります。ただし、他の奇妙なこと(呼び出したメソッド内で静的変数を使用するオブジェクトなど)は除きます。ただし、各呼び出しで同じオブジェクトを使用することを恐れている場合は、使用しません。

于 2013-03-10T16:48:48.703 に答える
1

初期化の頻度に関係なく、常に新しいインスタンスが作成されます。Synchrozniedキーワードはあなたの問題の解決策ではありません。

于 2013-03-10T16:49:39.913 に答える