ThreadLocal
一、ThreadLocal简介
1.是什么
2.能干嘛
①:阿里手册对使用ThreadLocal的规范
@Data
@AllArgsConstructor
@NoArgsConstructor
class House{
ThreadLocal<Integer> saleVolume=ThreadLocal.withInitial(()->0);
public void saleVolumeByThreadLocal(int size){
saleVolume.set(saleVolume.get()+size);
}
}
/**
* 需求:5个销售卖完随机数房子,各自独立销售额度,自己业绩按提成走
*/
public class ThreadLocalDemo {
public static void main(String[] args) throws InterruptedException {
ExecutorService threadPool = Executors.newFixedThreadPool(3);
House house=new House();
for (int i = 1; i <=10; i++) {
threadPool.submit(()->{
try{
Integer before = house.saleVolume.get();
int size = new Random().nextInt(5) + 1;
house.saleVolumeByThreadLocal(size);
Integer after = house.saleVolume.get();
System.out.println(Thread.currentThread().getName()+" before "+before+" after "+after);
}finally {
house.saleVolume.remove();
}
});
}
}
}
pool-1-thread-2 before 0 after 3
pool-1-thread-1 before 0 after 4
pool-1-thread-2 before 0 after 3
pool-1-thread-1 before 0 after 1
pool-1-thread-1 before 0 after 2
pool-1-thread-1 before 0 after 2
pool-1-thread-1 before 0 after 4
pool-1-thread-3 before 0 after 5
pool-1-thread-1 before 0 after 3
pool-1-thread-2 before 0 after 3
②总结
二、ThreadLocal源码分析
1. Thread、ThreadLocal、ThreadLocalMap关系
①Thread、ThreadLocal
②:ThreadLocal、ThreadLocalMap
③:三者总概括
2.总结
三、ThreadLocal内存泄漏问题
1.什么是内存泄漏
2.谁惹的祸
①:Why
②:强引用、软引用、弱引用、虚引用分别是什么?
整体架构
强引用
软引用
弱引用
虚引用
构造方法
引用队列
GCRoots和和四大引用小总结
③:为什么要用弱引用
四、总结