ThreadLocal 学习

ThreadLocal 是线程内部变量,以空间换时间的做法,将变量绑定到thread内部,这样能是变量成为 线程安全的,从而减小并发编程的复杂度,而sysn 这个典型的已时间换取空间,这个最大的不是性能问题而是 逻辑安全问题,并发编程最考验编程功底了,非牛人慎用。

         ThreadLocal<> 在jdk5中已经支持泛型了

          方法: get() ; 当为空时 会调用 initial()方法,这个方法默认返回null,需要初始值的话应该继承该类,覆盖这个方法。另一种方法是 继承,自己判断null,并进行初始值

          set(), 写入值。

        就这几个方法。

案例: spring security 对 将securityContext 绑定到当前线程中,这样在其他地方引用时就可以通过静态方法来用了,

实现了线程安全。 SecurityUserHolder.currentuser() 就是通过这种方法得到的。

还有 hibernateUtil 中的 getCurrentSession() 也是通过这种原理得到的

 

例           class     HibernateUtil(){

                      private static final ThreadLocal session = new ThreadLocal();

 

                       public static Session getCurrentSession(){

                                   Session ss = (Session) session.get();

                                   if(ss==null){

                                           ss = SessionFactory.createSession();

                                           session.set(ss);

                                   }

                                   return ss;

                         }

 

 

             }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值