static ThreadLocal<Metric> metric = new ThreadLocal<>();
这里用static因为相当于线程的私有全局变量,避免数据的重复copy(不同实例)。但可能导致内存泄漏(因为static不会被回收)。如果有线程池,线程会被复用就减低内存泄漏的可能。
https://www.zhihu.com/question/35250439
Strong ref是Map m = new HashMap();
Soft Ref内存不足才会回收,适用于缓存
Week Reference是回收器自动回收弱引用对象(HashMap中)
Phantom Ref是在析构finalize中不会复活下回收弱引用
https://droidyue.com/blog/2016/03/13/learning-threadlocal-in-java/
https://droidyue.com/blog/2014/10/12/understanding-weakreference-in-java/
我的书目: