1.ThreadLocal的作用和原理以及使用场景?
threadlocal是线程本地变量,它为每一个线程创建一个变量副本,来解决并发冲突问题
在jdk1.8以之前,每个threadlocal实例维护一个map,每个线程作为key,value保存的就是变量副本
在jdk1.8,改为每个Thread中维护一个threadlocalMap,threadlocal作为key,value保存变量副本
这样设计,threadLocalMap中的键值对数量就取决于threadlocal实例的数量,提高了访问效率。当线程被销毁,threadlocalMap也会随之销毁,减少了内存的消耗
使用场景:
spring security中,我们使用SecurityContextHolder来获取SecurityContext,
比如在springMVC中,我们通过RequestContextHolder来获取当前请求,
比如在 zuul中,我们通过ContextHolder来获取当前请求