これは十分な情報になると思いますので、ここで説明します。あなたがより多くの情報を必要とするならば、コメントにコメントがあります。Javaで同期を使用する場合
私は2つの内部クラスを持つクラスを持っています。内部クラスにはそれぞれ外部クラスのメソッドを呼び出す2つのメソッドがあります。だから、それは次のようになります。
public OuterClass {
private boolean outerMethodHasBeenCalled = false;
private void outerMethod() {
if(!outerMethodHasBeenCalled) {
// do stuff
}
outerMethodHasBeenCalled = true;
}
private FirstInnerClass {
public void someMethod() {
outerMethod();
}
}
private SecondInnerClass {
public void someOtherMethod() {
outerMethod();
}
}
}
それを注意することが重要です。
- これは、Androidアプリのためです。
FirstInnerClass
とSecondInnerClass
のインスタンスはJavaScriptインターフェイスとしてWebViewに渡されるため、特定の順序でいつでもsomeMethod
とsomeOtherMethod
を呼び出すことができます。 - 私は現在、同期されたキーワードなしで、既存のコードに問題があります。
outerMethod
はまったく同じ時刻に呼び出されます(ログメッセージを出力し、1000秒にタイムスタンプされます)。異なるオブジェクト。outerMethod
が呼び出されたときにouterMethodHasBeenCalled
がまだ偽であるため、私のアプリは 'それは2回行う'ということになります。これは大丈夫ではありません、それはまさに私が防止しようとしていることです。私のアプリは、一度だけ、一度だけ「ものをする」べきです:初めてouterMethod
が呼び出されます。 OuterClass
の複数のインスタンスがあるように聞こえるかもしれませんが、それはOuterClass
の1つのインスタンスであることを確かめてください。
outerMethod
が初めて呼び出されたときだけ、私のアプリは「大切にする」ことが重要です(これは明らかです)。以降の呼び出しはすべて無視されます。どんな内部クラスがouterMethod
を最初に呼び出すかは問題ではありません。
この場合、synchronizedキーワードを使用することは適切ですか?
+1 AtomicBooleanのために、何か新しいことを学んだ:) – quaylar