作家
登录

Java并发编程之并发代码设计

作者: 来源: 2017-09-19 16:53:11 阅读 我要评论

  • ThreadLocalMap就是一个Map构造
  • ThreadLocal的set办法取到当前哨程,拿到当前哨程的threadLocalMap对象,然后把ThreadLocal对象作为key,把要放入的值作为value,放到Map
  • ThreadLocal的get办法取到当前哨程,拿到当前哨程的threadLocalMap对象,然后把ThreadLocal对象作为key,拿到对应的value
    1. public class Thread implements Runnable { 
    2.      ThreadLocal.ThreadLocalMap threadLocals = null
    3.  
    4. public class ThreadLocal<T> { 
    5.     public T get() { 
    6.         Thread t = Thread.currentThread(); 
    7.         ThreadLocalMap map = getMap(t); 
    8.         if (map != null) { 
    9.             ThreadLocalMap.Entry e = map.getEntry(this); 
    10.             if (e != null
    11.                 return (T)e.value; 
    12.         } 
    13.         return setInitialValue(); 
    14.     } 
    15.  
    16.     ThreadLocalMap getMap(Thread t) { 
    17.         return t.threadLocals; 
    18.     } 
    19.  
    20.     public void set(T value) { 
    21.         Thread t = Thread.currentThread(); 
    22.         ThreadLocalMap map = getMap(t); 
    23.         if (map != null
    24.             map.set(this, value); 
    25.         else 
    26.             createMap(t, value); 
    27.     } 
    28.  

    ThreadLocal的设计很简单,就是给线程对象设置了一个内部的Map,可以放置一些数据。JVM大年夜底层包管了Thread对象之间不会看到对方的数据。

    应用ThreadLocal前提是给每个ThreadLocal保存一个零丁的对象,这个对象不克不及是在多个ThreadLocal共享的,不然这个对象也是线程不安然的

    ThreadLocal 内存泄漏

    栈封闭

    其实,ThreadLocalMap的设计中已经推敲到这种情况,也加上了一些防护办法:在ThreadLocal的get(),set(),remove()的时刻都邑清除线程ThreadLocalMap里所有key为null的value。

    所以每次应用完ThreadLocal,都调用它的remove()办法,清除数据就可以避免这个问题

    弗成变对象

    一个对象如不雅在创建后不克不及被修改,那么就称为弗成变对象。在并发编程中,一种被广泛承认的原则就是:尽可能的应用弗成变对象来创建简单、靠得住的代码

    在并发编程中,弗成变对象特别有效。因为创建后不克不及被修改,所以不会出现操作共享变量导致的内存一致性缺点

    然则法度榜样员们平日并不热衷于应用弗成变对象,因为他们担心每次创建新对象的开销。实际上这种开销经常被过分高估,并且应用弗成变对象所带来的一些效力晋升也抵消了这种开销

    我们先来看一个应用同步来解决线程安然的例子

    1. public class SynchronizedRGB { 

        推荐阅读

        Web的现状:网页性能提升指南

      【沙龙】51CTO诚邀您9月23号和多位技巧大年夜咖一路聊智能CDN的优化之路,抓紧时光哦! 互联网成长异常敏捷,所以我们创造了Web平台。平日 我们会忽视连通性等问题,但用户们却不会熟视无睹>>>详细阅读


      本文标题:Java并发编程之并发代码设计

      地址:http://www.17bianji.com/lsqh/37528.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)