6.4线程封闭
线程封闭
线程封闭:把对象封装到一个线程里,只有这一个线程能看到这个对象,这样,即使该对象不是线程安全的,也不会带来线程安全问题
如何实现线程封闭?
Ad-hoc线程封闭:程序控制实现,最糟糕,忽略
堆栈封闭:局部变量,无并发问题。多个线程访问一个方法的时候,每个线程都会拷贝一份局部变量到线程的栈中。
ThreadLocal线程封闭:特别好的封闭方法,ThreadLocal内部是一个map,map的key是线程的名称,map的值就是我们要封闭的对象
演示ThreadLocal
1.创建一个bean
package com.moluo.moapi.security.filter;
public class RequestHolder {
private final static ThreadLocal<Long> requestHolder = new ThreadLocal<>();
public static void add(Long id) {
requestHolder.set(id);
}
public static Long getId() {
return requestHolder.get();
}
public static void remove() {
requestHolder.remove();
}
}使用过滤器向ThreadLocal中放数据
注册过滤器
3.使用拦截器在方法处理完后移除ThreadLocal中的数据
注册拦截器(继承WebMvcConfigurerAdapter类,重写addInterceptors方法)
4.controller
5.使用postman访问 GET http://127.0.0.1:8080/threadLocal/test 将返回线程ID
Last updated
Was this helpful?