同一线程同一对象的方法异步调用 ScopedRunnableMethodFactory能保证对象自身异步方法调用的安全性
同一线程不同对象之间的通知
SZ4J 调用者派生NotificationObserver,通过NotificationRegistrar把自己注册到通知系统,通知源触发NotificationService 订阅模式,线程内同步调用,不存在对象生命周期的问题
MessageLoopProxy是线程安全的引用计数对象,内部封装了线程消息循环,MessageLoop销毁的时候会置空其MessageLoopProxy中的消息循环,支持线程安全的异步调用,适合在不同线程之间回调,回调过程是异步的,所以牵扯到的参数必须考虑对象生命周期以及对象方法调用的线程问题。我的想法就是回调的对象最好是生命周期跟application的一致的大对象,充当manager(这也正是一个管理者该做的事情),这样就能维持回调对象的合法性。
chrome推荐多使用非线程安全对象,也就是对象方法的执行都在对象创建的线程
Application<----------------------------------------------------------
|--------|... |
V V |
UI线程 文件读写线程 数据库读写线程 网络线程 ... |
UIMgr FileIOMgr DatabaseIOMgr NetIOMgr |
Obj... Obj... ... ... |
Obj... Obj... ... ... ---
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
在chrome中运用最多的是第二种技法,因为本身就没有那么多对象需要跨线程;其次是第三种,因为互联网客户端确实存在不少的多线程数据管理;最后是第一种技法,这种情况较为少见。
至于全面详尽的剖析,我没有精力或者暂时没有勇气去整理。后面代码的更新可能也会减缓,自己会考虑在如何使用这套框架做一些东西。