使用synchronized我希望這將是足夠的信息,所以在這裏不言而喻。如果您需要更多信息,請在評論中註明。當在Java
我有了兩個內部類的類。內部類每個都有兩個方法在外部類中調用一個方法。因此,它看起來像這樣:
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
實例被傳遞到的WebView的JavaScript接口,所以someMethod
和someOtherMethod
可以稱爲在任何時間,在任何特定的順序。 - 我現在有地方
outerMethod
被稱爲在準確的同一時間幾乎與現有的代碼有問題(不synchronized關鍵字)(我打印出日誌信息,他們正在加蓋時間戳第二的第1000個)的不同的對象。我的應用程序然後'做了'兩次,因爲當調用outerMethod
時,outerMethodHasBeenCalled
仍然是錯誤的。這並不好,這正是我想要阻止的。我的應用程序應該只做一次,只做一次:第一次調用outerMethod
。 - 聽起來好像我有
OuterClass
多個實例,但請放心,它的的OuterClass
只有一個實例。
重要的是,我的應用程序'做的東西'只有第一次outerMethod
被調用(我希望現在很明顯)。所有後續調用基本上被忽略。無論哪個班級首先呼叫outerMethod
- 無所謂。
那麼,是不是適合使用synchronized關鍵字在這種情況下?
+1爲AtomicBoolean,學到了新的東西:) – quaylar 2012-02-29 07:28:00