zoukankan      html  css  js  c++  java
  • ThreadLocal使用

    1. ThreadLocal提供了一种访问某个变量的特殊方式:访问到的变量属于当前线程,即保证每个线程的变量不一样,而同一个线程在任何地方拿到的变量都是一致的,这就是所谓的线程隔离。
    2. 如果要使用ThreadLocal,通常定义为private static类型,在我看来最好是定义为private static final类型。

    应用场景


    ThreadLocal通常用来共享数据,当你想在多个方法中使用某个变量,这个变量是当前线程的状态,其它线程不依赖这个变量,你第一时间想到的就是把变量定义在方法内部,然后再方法之间传递参数来使用,这个方法能解决问题,但是有个烦人的地方就是,每个方法都需要声明形参,多处声明,多处调用。影响代码的美观和维护。有没有一种方法能将变量像private static形式来访问呢?这样在类的任何一处地方就都能使用。这个时候ThreadLocal大显身手了。

    原文:http://ifeve.com/threadlocal%E4%BD%BF%E7%94%A8/

    ThreadLocal 是为了保障在一个线程随处使用这个变量,而不被别的线程干扰。

    总结


    首先,ThreadLocalMap并不是为了解决线程安全问题,而是提供了一种将实例绑定到当前线程的机制,类似于隔离的效果,实际上自己在方法中new出来变量也能达到类似的效果。ThreadLocalMap跟线程安全基本不搭边,绑定上去的实例也不是多线程公用的,而是每个线程new一份,这个实例肯定不是共用的,如果共用了,那就会引发线程安全问题。ThreadLocalMap最大的用处就是用来把实例变量共享成全局变量,在程序的任何方法中都可以访问到该实例变量而已。网上很多人说ThreadLocalMap是解决了线程安全问题,其实是望文生义,两者不是同类问题。

  • 相关阅读:
    使用Zookeeper实现负载均衡原理
    Zookeeper windows环境安装
    Zookeeper基础入门介绍
    jsp
    未解决01
    继承中代码的执行顺序
    jquery02-jQuery效果=隐藏和显示+切换+淡入淡出+滑动+动画+回调+链
    jquery01-简介+语法+选择器+事件
    json01-json简介和语法
    ajax02-XMLHttpRequest 对象的使用
  • 原文地址:https://www.cnblogs.com/chen-msg/p/8386480.html
Copyright © 2011-2022 走看看