zoukankan      html  css  js  c++  java
  • DRP-ThreadLocal简单的理解

          简单就是jar一类套餐包。在一个简单的事情是一个工具类!该工具可以做?该工具被用来写多线程程序,行。多线程是有效的。你只能去网上找资料,由于今天我们仅仅来介绍ThreadLocal的知识。

         我们来看看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这部分是不深刻的理解,有什么不对,请大家指正及时读者。

    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    TCP 监控工具 TCPMonitor
    程序员职业规划
    <转>eclipse如何修改dynamic web module version .
    JBoss部属和EJB调用-EJB3.0入门经典学习笔记(2)
    环境配置与JBoss安装-EJB3.0入门经典学习笔记(1)
    【EDA】PCBA丝印尺寸
    【Altium Designer】PCB如何用规则检查
    【Cadence】Gerber之二:钻孔文件设置与生成
    【生产】如何设计生产线
    【EMC】脉冲群Burst
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4612351.html
Copyright © 2011-2022 走看看