加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

正确理解Thread Local的原理与适用场景

发布时间:2018-08-23 15:26:07 所属栏目:教程 来源:郭俊
导读:副标题#e# 技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战 一、ThreadLocal解决什么问题 由于 ThreadLocal 支持范型,如 ThreadLocal StringBuilder ,为表述方便,后文用 变量 代表 ThreadLocal 本身,而用 实例 代表具体类型(如

这里使用 ThreadLocal 重新实现该功能如下所示。

  1. public class SessionHandler { 
  2.   public static ThreadLocal<Session> session = new ThreadLocal<Session>(); 
  3.   @Data 
  4.   public static class Session { 
  5.     private String id; 
  6.     private String user; 
  7.     private String status; 
  8.   } 
  9.   public void createSession() { 
  10.     session.set(new Session()); 
  11.   } 
  12.   public String getUser() { 
  13.     return session.get().getUser(); 
  14.   } 
  15.   public String getStatus() { 
  16.     return session.get().getStatus(); 
  17.   } 
  18.   public void setStatus(String status) { 
  19.     session.get().setStatus(status); 
  20.   } 
  21.   public static void main(String[] args) { 
  22.     new Thread(() -> { 
  23.       SessionHandler handler = new SessionHandler(); 
  24.       handler.getStatus(); 
  25.       handler.getUser(); 
  26.       handler.setStatus("close"); 
  27.       handler.getStatus(); 
  28.     }).start(); 
  29.   } 

使用 ThreadLocal 改造后的代码,不再需要在各个方法间传递 Session 对象,并且也非常轻松的保证了每个线程拥有自己独立的实例。

如果单看其中某一点,替代方法很多。比如可通过在线程内创建局部变量可实现每个线程有自己的实例,使用静态变量可实现变量在方法间的共享。但如果要同时满足变量在线程间的隔离与方法间的共享,ThreadLocal再合适不过。

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读