同一線程同一對象的方法異步調用 ScopedRunnableMethodFactory能保證對象自身異步方法調用的安全性
同一線程不同對象之間的通知
SZ4J 調用者派生NotificationObserver,通過NotificationRegistrar把自己注冊到通知系統,通知源觸發NotificationService 訂閱模式,線程內同步調用,不存在對象生命周期的問題
MessageLoopProxy是線程安全的引用計數對象,內部封裝了線程消息循環,MessageLoop銷毀的時候會置空其MessageLoopProxy中的消息循環,支持線程安全的異步調用,適合在不同線程之間回調,回調過程是異步的,所以牽扯到的參數必須考慮對象生命周期以及對象方法調用的線程問題。我的想法就是回調的對象最好是生命周期跟application的一致的大對象,充當manager(這也正是一個管理者該做的事情),這樣就能維持回調對象的合法性。
chrome推薦多使用非線程安全對象,也就是對象方法的執行都在對象創建的線程
Application<----------------------------------------------------------
|--------|... |
V V |
UI線程 文件讀寫線程 數據庫讀寫線程 網絡線程 ... |
UIMgr FileIOMgr DatabaseIOMgr NetIOMgr |
Obj... Obj... ... ... |
Obj... Obj... ... ... ---
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
在chrome中運用最多的是第二種技法,因為本身就沒有那么多對象需要跨線程;其次是第三種,因為互聯網客戶端確實存在不少的多線程數據管理;最后是第一種技法,這種情況較為少見。
至于全面詳盡的剖析,我沒有精力或者暫時沒有勇氣去整理。后面代碼的更新可能也會減緩,自己會考慮在如何使用這套框架做一些東西。