zoukankan      html  css  js  c++  java
  • ThreadLocal 理解

    参考:http://blog.csdn.net/lufeng20/article/details/24314381

    1.方法:

    • void set(Object value)设置当前线程的线程局部变量的值。
    • public Object get()该方法返回当前线程所对应的线程局部变量。
    • public void remove()将当前线程局部变量的值删除,目的是为了减少内存的占用,该方法是JDK 5.0新增的方法。需要指出的是,当线程结束后,对应该线程的局部变量将自动被垃圾回收,所以显式调用该方法清除线程的局部变量并不是必须的操作,但它可以加快内存回收的速度。
    • protected Object initialValue()返回该线程局部变量的初始值,该方法是一个protected的方法,显然是为了让子类覆盖而设计的。这个方法是一个延迟调用方法,在线程第1次调用get()或set(Object)时才执行,并且仅执行1次。ThreadLocal中的缺省实现直接返回一个null。

    2.原理:

    ThreadLocal会为每一个线程提供一个独立的变量副本,从而隔离了多个线程对数据的访问冲突。因为每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了。ThreadLocal提供了线程安全的共享对象,在编写多线程代码时,可以把不安全的变量封装进ThreadLocal。

    3.threadlocal具体实现

    每个线程中都有一个独立的ThreadLocalMap副本,它所存储的值,只能被当前线程读取和修改。ThreadLocal类通过操作每一个线程特有的ThreadLocalMap副本,从而实现了变量访问在不同线程中的隔离。因为每个线程的变量都是自己特有的,完全不会有并发错误。还有一点就是,ThreadLocalMap存储的键值对中的键是this对象指向的ThreadLocal对象,而值就是你所设置的对象了。

  • 相关阅读:
    由DataSet导出生成excel的几种方法
    linq日期查询
    上传文件
    C#获取文件的MD5值
    设置图层透明度
    highcharts中的x轴如何显示时分秒时间格式
    axios中文文档
    如何在 Highcharts 图中当所占百分比为 0 时不显示0%
    一个简易的选择小时(时分秒)的插件
    三分钟上手Highcharts简易甘特图
  • 原文地址:https://www.cnblogs.com/wjw334/p/4496392.html
Copyright © 2011-2022 走看看