DRP-ThreadLocal简单理解

      简单来讲是jar包封装的一个类,在简单一点是一个工具类!这个工具类能干啥?这个工具类是用来编写多线程的程序,好吧,多线程是啥,你们只能去网上找资料了,由于今天咱们只来介绍ThreadLocal的知识。api

     咱们来看看ThreadLocal封装的接口方法吧:安全

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

   上面这些方法咱们能够api文档查询到的,到了如今的ThreadLocal也变得更增强大了,加入了泛型的概念,void set(T value)、T get()以及T initialValue(),咱们能够对多种数据类型进行操做了。并发

     在同步机制中,经过对象的锁机制保证同一时间只有一个线程访问变量。这时该变量是多个线程共享的,使用同步机制要求程序慎密地分析何时对变量进行读写,何时须要锁定某个对象,何时释放对象锁等繁杂的问题,程序设计和编写难度相对较大。
而ThreadLocal则从另外一个角度来解决多线程的并发访问。在编写多线程代码时,能够把不安全的变量封装进ThreadLocal。
     因为ThreadLocal中能够持有任何类型的对象,低版本JDK所提供的get()返回的是Object对象,须要强制类型转换。但JDK 5.0经过泛型很好的解决了这个问题,在必定程度地简化ThreadLocal的使用,代码清单 9 2就使用了JDK 5.0新的ThreadLocal<T>版本。
     归纳起来讲,对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,曾经写过这么一篇博文:《synchronized的应用》而ThreadLocal采用了“以空间换时间”的方式。前者仅提供一份变量,让不一样的线程排队访问,然后者为每个线程都提供了一份变量,所以能够同时访问而互不影响。
工具

     关于ThreadLocal这一部分了解的仍是不太深,有什么错误请读者及时指正。spa

相关文章
相关标签/搜索