博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
15:EventBus源码解析
阅读量:6407 次
发布时间:2019-06-23

本文共 1401 字,大约阅读时间需要 4 分钟。

1、ThreadLocal

Thread类中有一个threadLocals字段,它是ThreadLocal内部类ThreadLocalMap类型。

  • ThreadLocal的set方法:操作当前线程的threadLocals,以ThreadLocal.this为键,将值保存到Thread.threadLocals中
  • ThreadLocal的get方法:取出当前线程的threadLocals中以ThreadLocal.this为键的值
//ThreadLocal.java    public void set(T value) {        Thread t = Thread.currentThread();        ThreadLocalMap map = getMap(t);        if (map != null)            map.set(this, value);        else            createMap(t, value);    }    ThreadLocalMap getMap(Thread t) {        return t.threadLocals;    }        void createMap(Thread t, T firstValue) {        t.threadLocals = new ThreadLocalMap(this, firstValue);    }        public T get() {        Thread t = Thread.currentThread();        ThreadLocalMap map = getMap(t);        if (map != null) {            ThreadLocalMap.Entry e = map.getEntry(this);            if (e != null) {                @SuppressWarnings("unchecked")                T result = (T)e.value;                return result;            }        }        return setInitialValue();    }    复制代码

ThreadLocal构造函数,可指定保存的数据类型,以及重写initialValue设置初始值。之后就可以在不同线程中使用threadLocal的set、get方法,保存此数据类型的数据了。

//EventBus.java    private final ThreadLocal
currentPostingThreadState = new ThreadLocal
() { @Override protected PostingThreadState initialValue() { return new PostingThreadState(); } };复制代码

2、架构

3、源码

转载地址:http://pkhea.baihongyu.com/

你可能感兴趣的文章
javascript有用代码块(1)
查看>>
libevent 笔记
查看>>
PHP实现人人OAuth登录和API调用
查看>>
redis源码笔记 - initServer
查看>>
FindBugs工具常见问题
查看>>
ECSHOP报错误Deprecated: preg_replace(): The /e modifier is depr
查看>>
【iOS】iOS之Button segue弹出popOver消除(dismiss)问题
查看>>
java多线程系列5-死锁与线程间通信
查看>>
数据库分库分表
查看>>
腾讯Hermes设计概要——数据分析用的是列存储,词典文件前缀压缩,倒排文件递增id、变长压缩、依然是跳表-本质是lucene啊...
查看>>
小程序模板嵌套以及相关遍历数据绑定
查看>>
Systemd入门教程:命令篇(转)
查看>>
java随机范围内的日期
查看>>
linux包之diff
查看>>
spring事务学习(转账案例)(二)
查看>>
[官方教程] [ES4封装教程]1.使用 VMware Player 创建适合封装的虚拟机
查看>>
http协议与http代理
查看>>
【iOS开发-91】GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例...
查看>>
Redis+Spring缓存实例
查看>>
Storm集群安装详解
查看>>