当前位置: 首页 > news >正文

购物网站开发模板一 网站建设总体目标

购物网站开发模板,一 网站建设总体目标,网站建设文案有趣,旅游网站排名前5位的ThreadLocal翻译成中文比较准确的叫法应该是#xff1a;线程局部变量。 这个玩意有什么用处#xff0c;或者说为什么要有这么一个东东#xff1f;先解释一下#xff0c;在并发编程的时候#xff0c;成员变量如果不做任何处理其实是线程不安全的#xff0c;各个线程都 在操… ThreadLocal翻译成中文比较准确的叫法应该是线程局部变量。   这个玩意有什么用处或者说为什么要有这么一个东东先解释一下在并发编程的时候成员变量如果不做任何处理其实是线程不安全的各个线程都 在操作同一个变量显然是不行的并且我们也知道volatile这个关键字也是不能保证线程安全的。那么在有一种情况之下我们需要满足这样一个条件 变量是同一个但是每个线程都使用同一个初始值也就是使用同一个变量的一个新的副本。这种情况之下ThreadLocal就非常使用比如说DAO的数 据库连接我们知道DAO是单例的那么他的属性Connection就不是一个线程安全的变量。而我们每个线程都需要使用他并且各自使用各自的。这种 情况ThreadLocal就比较好的解决了这个问题。   我们从源码的角度来分析这个问题。   首先定义一个ThreadLocal 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class ConnectionUtil {     private static ThreadLocalConnection tl new ThreadLocalConnection();     private static Connection initConn null;     static {         try {             initConn DriverManager.getConnection(url, name and password);         } catch (SQLException e) {             e.printStackTrace();         }     }           public Connection getConn() {         Connection c tl.get();         tl.set(initConn);         return c;     }       }   这样子都是用同一个连接但是每个连接都是新的是同一个连接的副本。   那么实现机制是如何的呢   1、每个Thread对象内部都维护了一个ThreadLocalMap这样一个ThreadLocal的Map可以存放若干个ThreadLocal。 1 2 3 /* ThreadLocal values pertaining to this thread. This map is maintained  * by the ThreadLocal class. */ ThreadLocal.ThreadLocalMap threadLocals null;   2、当我们在调用get()方法的时候先获取当前线程然后获取到当前线程的ThreadLocalMap对象如果非空那么取出ThreadLocal的value否则进行初始化初始化就是将initialValue的值set到ThreadLocal中。 1 2 3 4 5 6 7 8 9 10 public T get() {     Thread t Thread.currentThread();     ThreadLocalMap map getMap(t);     if (map ! null) {         ThreadLocalMap.Entry e map.getEntry(this);         if (e ! null)             return (T)e.value;     }     return setInitialValue(); }   3、当我们调用set()方法的时候很常规就是将值设置进ThreadLocal中。   4、总结当我们调用get方法的时候其实每个当前线程中都有一个ThreadLocal。每次获取或者设置都是对该ThreadLocal进行的操作是与其他线程分开的。   5、应用场景当很多线程需要多次使用同一个对象并且需要该对象具有相同初始化值的时候最适合使用ThreadLocal。   6、其实说再多也不如看一下源码来得清晰。如果要看源码其中涉及到一个WeakReference和一个Map这两个地方需要了解下这两 个东西分别是a.Java的弱引用也就是GC的时候会销毁该引用所包裹(引用)的对象这个threadLocal作为key可能被销毁但是只要我们 定义成他的类不卸载tl这个强引用就始终引用着这个ThreadLocal的永远不会被gc掉。b.和HashMap差不多。   事实上从本质来讲就是每个线程都维护了一个map而这个map的key就是threadLocal而值就是我们set的那个值每次线 程在get的时候都从自己的变量中取值既然从自己的变量中取值那肯定就不存在线程安全问题总体来讲ThreadLocal这个变量的状态根本没 有发生变化他仅仅是充当一个key的角色另外提供给每一个线程一个初始值。如果允许的话我们自己就能实现一个这样的功能只不过恰好JDK就已经帮 我们做了这个事情。 转载于:https://www.cnblogs.com/Berryxiong/p/6220545.html
http://www.pierceye.com/news/504304/

相关文章:

  • 咸宁网站建设公司水网站模板
  • 移动网站开发教材seo网站排名优化价格
  • 重生做网站小说畅想网络网站建设推广
  • 找个做网站的 优帮云wordpress 判断自定义栏目
  • wordpress文章目录分页wordpress加速优化服务
  • 二级目录网站怎么做小程序开发成都公司
  • 网站标题名字和备案名字网站开发 质量管理
  • 网站与系统开发吉安网站建设收费
  • 湖北襄阳网站建设wordpress电商ar
  • 微做网站环保行业网站建设
  • 昭通做网站公司北京手机网站制作多少钱
  • 昆明企业建网站多少钱如何弄微信小程序
  • wordpress清理网站缓存做的比较简约的网站
  • 青岛高端网站制作中铁建设集团门户密码
  • 公司专业做网站做网站域名起什么作用
  • 推广型网站建设机构如何创建wordpress
  • 做网站交互demo工具在线设计自己的签名免费
  • 做百度推广会送网站吗网站建设和邮箱的关联
  • 假网站如何做济南天桥区网站建设
  • 顺企网我做网站余姚网站建设在哪里
  • 做网站logo用啥软件做电子书网站
  • 企业网站推广的策略有哪些php怎么建立站点
  • 找网站设计公司 看那些wordpress居中
  • 无锡网站营销公司哪家好全屏网页设计尺寸
  • 做第一个网站什么类型网站搜索引擎优化案例
  • 网站代码生成网站网站开发专业 工作意愿
  • ps做网站效果图尺寸如何重庆网站建设选夹夹虫
  • 上鼎工程建设有限公司网站最简单的手机网站制作
  • 网站维护企业网站的后缀名
  • 建设网站需要哪些认证做公众号的网站模板下载吗