2011-02-25 119 views
0

Android中的java.util.Observable是否線程安全? documentation表示只有deleteObserver()和deleteObservers()是同步方法。怎麼樣addObserver(),設置/清除/ hasChanged()?我可以在不鎖定Observable對象的情況下安全地從不同線程調用addObserver()嗎?Android中的java.util.Observable是否線程安全?

+0

javadoc中「synchronized」是怎麼產生的?那是一個實現細節! – irreputable 2011-02-25 23:25:43

回答

1

AFAIK,Android基於Apache Harmony。我在這裏找到了Harmony的Observable實現的源代碼:http://www.java2s.com/Open-Source/Java-Document/Apache-Harmony-Java-SE/java-package/java/util/Observable.java.htm

在我看來,試圖使其線程安全,但失敗:他們忘了同步countObservers方法,以及set/has/clearChanged方法。

+0

謝謝!我試圖尋找代碼,但不知道Java Android使用什麼實現。 – Mukul 2011-02-25 23:01:00

+0

在派生的Observable中覆蓋這些unsync'd方法並將它們聲明爲synchronized是正確的解決方案嗎?如下所示:@Override public synchronized boolean hasChanged(){return super.hasChanged(); }' – Mukul 2011-02-25 23:06:16

+0

是的,你可以這樣做。 – 2011-02-25 23:20:33