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