2011-09-23 22 views
9

Trong Observer lớp mẫu java của ObserverQuan sát, là cuộc gọi đến Quan sát đối tượng của notifyObservers (Object arg0), trong chủ đề khác nhau, thread-an toàn không?Có phải java.util.Observable thread-safe?

Ví dụ: Tôi có nhiều chủ đề, tất cả quan sát, mà sẽ được gọi notifyObservers (...) bao giờ nên thường xuyên. Tất cả các chủ đề này báo cáo cho một đối tượng quan sát đơn.

Tôi có gặp phải các vấn đề tương tranh hay không và cách nào tốt hơn để giải quyết vấn đề này? Tôi biết một giải pháp có thể sử dụng trình xử lý sự kiện. Tuy nhiên tôi không chắc chắn làm thế nào để thực hiện nó và cũng có thể, tôi muốn gắn bó với việc thực hiện mô hình Observer, nếu có thể.

+0

http://stackoverflow.com/questions/5123121/is-java-util-observable-in-android-thread-safe – Mob

+0

Cảm ơn tôi đã không thấy điều đó, tuy nhiên dường như không trả lời câu hỏi này, cũng như không đưa ra bất kỳ câu hỏi nào gợi ý về cách tìm hiểu. Điều này là để thực hiện Java bình thường. – Vort3x

+0

Thử giải mã đối tượng Observable trong bản phân phối java mà bạn đang sử dụng. – DwB

Trả lời

7

Từ mã nguồn (Tôi có nguồn Java 5, nhưng nó phải giống nhau cho Java 6 và 7) có vẻ như bạn chỉ có đồng bộ hóa trên chính bản thân số Observable.

Từ phương pháp notifyObservers(...) (trong Observable):

synchronized (this) { 
    //the observers are notified in this block, with no additional synchronization 
} 

Vì vậy, nếu các Observer không thay đổi bất kỳ dữ liệu chia sẻ nó nên được tốt. Nếu có - bạn có thể có nhiều cuộc gọi đến update(Observable, Object) với các số khác nhau Observable s - bạn cần tự thêm đồng bộ hóa trên dữ liệu được chia sẻ đó.

Các vấn đề liên quan