设计模式拯救代码

静态方法是对类上锁,这个类定义了两个,所以是去竞争同一个类的锁,

ThreadLocal




SimpleDateFormat

ThreadLocal 让每个线程保存自己的变量副本

为多线程环境下变量安全提供的一种解决思路,给每个线程建立自己的单独的变量

内部类 ThreadLocalMap 实现线程隔离机制 key, value组成的一个Entry数组,key 就是ThreadLocal他本身的一个弱引用,valve是对应的线程变量副本

ThreadLocal 他本身是不存储值的,他只是提供一个能查到这个值的key

ThreadLocal 包含在 Thread 中




内存泄漏

只有Key是弱引用,value还是强引用的关系,
如果一个ThreadLocal没有外部强引用来引用他,GC的时候,弱引用会被回收,ThreadLocalMap会出现key为null的Entry,就不能通过key找到value,value是强引用的,会一直存在,就内存泄漏,,但是 get set remove都会对key为null的Entry 进行清除,把他的value置为空。

ThreadRe引用这个Thread,
Thread在引用这个ThreadLocal,
ThreadLocal在引用这个Entry,
Entry在引用这个value,

所以我们只要手动调用一下remove方法 就不会出现内存泄漏的问题了。

ReentrantLock

默认采用非公平锁



公平锁

CountDownLatch




posted @ 2021-05-19 15:14  千面鬼手大人  阅读(35)  评论(0编辑  收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css