当前位置: 首页 > news >正文

山西宏图建设集团有限公司网站坑人网站怎么做

山西宏图建设集团有限公司网站,坑人网站怎么做,太原网站科技公司,做网站天通苑一.什么是ThreadLocal? ThreadLocal,即线程本地变量。如果你创建了一个 ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个本地拷贝,多个线程操作这个变量的时候,实际是在操作自己本地内存里面的变量&…

一.什么是ThreadLocal?

ThreadLocal,即线程本地变量。如果你创建了一个 ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个本地拷贝,多个线程操作这个变量的时候,实际是在操作自己本地内存里面的变量,从而起到线程隔离的作用,也就是两个线程间互不影响,避免了并发场景下的线程安全问题。

 这样就有利于我们使用ThreadLocal来存取数据。

上图灰色以及绿色是两个不同的线程,我们可以看出两个线程间的数据是独立互不影响,而利用这个ThreadLocal我们可以实现两个事情:

  1. 通过单线程保存数据来减少参数传递
  2. 在同一线程间共享数据

二.ThreadLocal的使用:

这里我们以将JWT令牌放入线程内并在Service层读取JWT令牌并获取内部用户 id 值为例 =>

1.导入ThreadLocal的工具类:

这里工具类是new一个ThreadLocal来维护全局唯一的ThreadLocal对象,然后使用其内部的三个方法就可以使用了 => 

public class ThreadLocalUtil {//提供ThreadLocal对象,private static final ThreadLocal THREAD_LOCAL = new ThreadLocal();//根据键获取值public static <T> T get(){return (T) THREAD_LOCAL.get();}//存储键值对public static void set(Object value){THREAD_LOCAL.set(value);}//清除ThreadLocal 防止内存泄漏public static void remove(){THREAD_LOCAL.remove();}
}

这里需要注意,因为ThreadLocal生命周期非常长,所以我们在使用完后需要调用内部方法 remove() 删除 ThreadLocal 以此来避免内存泄露。 

2.在拦截器内把JWT令牌存储到ThreadLocal中:

①当拦截器拦截请求,我们就会再preHandle()方法内开辟线程空间并保存JWT令牌。

②这里注意当响应完数据,也就是请求结束,我们就不会使用数据,而这个时候我们就需要移除数据,这个时候我们重写拦截器内部的afterCompletion()方法,在方法内调用remove()方法删除ThreadLocal。

@Component
public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request , HttpServletResponse response , Object handle) throws Exception{String token = request.getHeader("Authorization"); //Authorization为请求头的名字try {//令牌验证Map<String,Object> claims = JwtUtil.parseToken(token);//线程开辟空间存储ThreadLocalUtil.set(claims);//放行return true;}catch (Exception e){//http响应状态码为401在·response.setStatus(401);//不放行return false;}}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {//清空线程数据ThreadLocalUtil.remove();}
}

3.使用ThreadLocal来获取存储数据使用:

@Service
public class CategoryServiceImpl implements CategoryService {@Autowiredprivate CategoryMapper categoryMapper;@Overridepublic void add(Category category) {category.setCreateTime(LocalDateTime.now());category.setUpdateTime(LocalDateTime.now());//在ThreadLocal中获取Map<String,Object> map = ThreadLocalUtil.get();Integer userId = (Integer) map.get("id");category.setCreateUser(userId);categoryMapper.add(category);}
}

好了,ThreadLocal的使用就到这里了,感谢收看!!!

http://www.yayakq.cn/news/971004/

相关文章:

  • php 网站 下载开原网站网站建设
  • 华为手表网站网站建设中国十强
  • 网站的新闻栏与产品栏如何做收费抽奖网站
  • 济南比较好的网站开发公司网站建设工具的种类
  • 青海建设工程信息网站网页生成
  • 潍坊知名网站建设最新报价可信网站图标 费流量
  • 赣州网站维护淄博专业网站建设哪家专业
  • 乡村振兴网站建设网络公司是干什么工作的
  • 勤哲网站开发视频关键词排名优化工具有用吗
  • 备案不关闭网站淄博网站关键词优化
  • 无锡网站建设唯唯网络什么是oa系统
  • 炫酷的动画网站网站制作方案在哪找
  • 郑州网站建设搜q.479185700做业务网站
  • 如何设计服装网站首页做政协网站软件的公司
  • 有什么网站可以发布个人信息建网站需要几程序员
  • 3深圳网站建设十大网站建设公司
  • 网站建设绪论网页播放视频 网站开发
  • 手机建网站推广优秀作文网站都有哪些
  • 什么是网络营销调研?它有什么特点?宁波seo在线优化方案
  • 怎么做网站主常用的网页编辑软件有哪些
  • 阿里 网站建设方案书 模板网络策划专员
  • 有可以免费建网站的吗如何制作手机免费网站模板下载
  • 大学生想做网站徐州免费网站制作
  • 自己录入数据做问卷的网站免费品牌网站制作
  • vs2105制作个人网站车务网站开发
  • 后端网站开发培训做的好详情页网站
  • 建站 哪个网站系统好用wordpress 下拉菜单插件
  • 吉安市建设局网站aspnet东莞网站建设价格
  • 网站建设登录wordpress右下角添加欢迎弹窗
  • 制作单页网站教程兰州网站开发