這可能是一個非常普遍的問題,但我仍然會拍攝,因爲我需要誠實的建議。我有一個非常簡單的庫,它主要是線程安全的,因爲大多數類都是不可變的。但是,我有2-3班不是,我不能修改它們。Java多線程和異步Http請求處理
該庫廣泛用於異步HTTP客戶端。它是這樣工作的。客戶端用觀察者實例化。觀察者處理所有完成,失敗或加載事件。觀察者也從這個其他庫調用必要的函數。
我正在使用異步HTTP客戶端,就像它運行在具有非阻塞io的單線程中。但是,在下面,客戶端使用線程池。
我的問題是:如果我使觀察者中的所有處理程序方法同步,是否可以解決所有其他線程安全問題?
例如,我們有以下設置。
Client -> calls methods from the
Observer
synchronized onLoaded -> calls thread unsafe code
synchronized onError -> calls thread unsafe code
synchronized onCompleted -> calls thread unsafe code
如果這沒有意義,是否有可能以某種方式來執行主線程這些方法中的所有代碼,因此實現了非阻塞IO的設計我想跟進?
CLARIFICATIONS:我知道Async HTTP lib是基於線程和阻塞的,但其餘代碼不是......一切都基於事件。
它對我有意義,但它在實踐中不起作用。我使用任何線程的唯一時間是作爲這個異步http客戶端的一部分,只是在觀察者上進行同步調用,它不會同步應用程序的其餘部分。 – Pass 2011-06-10 14:05:54