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

gis做图网站020网站建设

gis做图网站,020网站建设,十大小说网站排名,定制网站开发介绍图这是我上周的帖子的后续文章#xff0c;在那篇文章中我解释了ThreadLocal用法的动机 。 从帖子中我们可以回想起#xff0c;如果您希望每个线程都有一个独立初始化的变量副本#xff0c;则ThreadLocal确实是一个很酷的概念。 现在#xff0c;好奇的人可能已经开始问“我如何… 这是我上周的帖子的后续文章在那篇文章中我解释了ThreadLocal用法的动机 。 从帖子中我们可以回想起如果您希望每个线程都有一个独立初始化的变量副本则ThreadLocal确实是一个很酷的概念。 现在好奇的人可能已经开始问“我如何在Java中实现这样的概念” 否则您可能会觉得这不是一个有趣的话题–毕竟您在这里所需的只是一张地图 不是吗 在处理ThreadLocal T时 将解决方案实现为HashMap ThreadT并以Thread.currentThread作为键似乎是明智的。 其实不是那么简单。 因此如果您有五分钟的时间请忍受我我将指导您完成一个美丽的设计概念。 简单的HashMap解决方案的第一个明显问题是线程安全性。 由于HashMap并不是为支持并发使用而构建的因此我们无法在多线程环境中安全地使用该实现。 幸运的是我们不需要花很多时间来解决问题-ConcurrentHashMap ThreadT看起来像是天作之合。 检索的完全并发性和可调整的预期更新并发性正是我们首先需要的。 现在如果您将基于ConcurrentHashMap的解决方案应用于JDK源代码中的ThreadLocal实现则会带来两个严重的问题。 首先在Map结构中将线程作为键。 由于映射永远不会被垃圾回收因此最终您将永远保持对Thread的引用从而阻止了该线程成为GCd。 不情愿的是您在设计中造成了巨大的内存泄漏。 第二个问题可能需要更长的时间才能浮出水面但是即使在幕后进行了巧妙的分段以减少锁争用的机会 ConcurrentHashMap仍然承担同步开销。 在同步需求仍然存在的情况下您仍然拥有一个结构可能成为瓶颈的根源。 但是让我们首先开始解决最大的问题。 如果我们的引用是指向相关线程的最后一个引用则我们的数据结构需要允许对线程进行垃圾回收。 再次第一个可能的解决方案是盯着我们–而不是通常引用对象为什么不使用WeakReferences 因此实现现在看起来类似于以下内容 Collections.synchronizedMap(new WeakHashMapThread, T()) 现在我们已经解决了泄漏问题–如果除我们之外没有人引用Thread 则可以将其定型并进行垃圾回收。 但是我们仍然没有解决并发问题。 现在解决方案实际上是关于跳出思路思考的样本。 到目前为止我们已经将ThreadLocal变量视为映射到变量的Threads 。 但是如果我们颠倒了思路而是设想了一个解决方案将ThreadLocal对象映射到每个Thread中的值该怎么办 如果每个线程都存储该映射并且ThreadLocal只是该映射的接口则可以避免同步问题。 更好的是我们还避免了GC带来的问题 确实当我们打开ThreadLocal和Thread类的源代码时 我们看到这正是在JDK中实际实现该解决方案的方式 public class Thread implements Runnable {ThreadLocal.ThreadLocalMap threadLocals null;// cut for brevity }public class ThreadLocalT {static class ThreadLocalMap {// cut for brevity}ThreadLocalMap getMap(Thread t) {return t.threadLocals;}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();}private T setInitialValue() {T value initialValue();Thread t Thread.currentThread();ThreadLocalMap map getMap(t);if (map ! null)map.set(this, value);elsecreateMap(t, value);return value;}// cut for brevity } 因此这里有它。 Thread类保留对ThreadLocal.ThreadLocalMap实例的引用该实例是使用对键的弱引用构建的。 以相反的方式构建结构因为我们的ThreadLocal只能访问当前线程中的值所以我们完全避免了线程争用问题。 另外当Thread完成工作时映射可以进行垃圾回收因此我们也避免了内存泄漏的问题。 希望您对设计有所了解因为它确实是解决复杂问题的理想解决方案。 我确实认为阅读源代码是学习新概念的理想方式。 而且如果您是Java开发人员那么与阅读集成到JDK的Joshua Bloch和Doug Lea源代码相比还有什么比这更好的获取知识的地方了 参考 如何实现ThreadLocal 由我们的JCG合作伙伴 Nikita Salnikov Tarnovski在Plumbr Blog博客上获得。 翻译自: https://www.javacodegeeks.com/2013/11/how-is-threadlocal-implemented.html
http://www.yutouwan.com/news/444681/

相关文章:

  • 如何查询网站icp备案做字网站
  • 网站模板下平面设计公司广告语
  • 学做网站难不难有哪些做平面设计好的网站有哪些内容
  • 定州建设厅网站个人在湖北建设厅网站申请强制注销
  • 学互联网做网站是什么合肥建设银行招聘网站
  • 蚌埠市建设银行网站怎么看商标有没有注册
  • wordpress 留言板展示湖南正规seo优化
  • 网站建设方案 前台 后台seo新手快速入门
  • 域名过期网站还有用吗网站访问量js
  • 网站推广方案注意事项?软件工程好找工作吗
  • 合肥市建设厅官方网站浙江华企 做网站怎么样
  • 广元市建设局官方网站长沙百度推广开户
  • 北京免费建站公益广告
  • 网站科技感颜色在线识图
  • 网站建设大作业成品免费观看网站
  • asp 网站建设教程免费网站建设方案
  • 长沙网站制作公司推荐政务网站风格
  • 湖南网站建设网络公司wordpress绑定手机版
  • 自己做彩票网站合法吗贵州省房屋和城市建设厅官方网站
  • 企业网站设计与实现网站建设 电子商务 品牌首选IDC
  • 手机网站和电脑网站的区别一级造价工程师注册管理系统
  • 做网站第三方外贸企业邮箱哪家好
  • 外贸网站建设推广方案企业网络规划与设计方案
  • 2017年免费建网站翰诺网站建设
  • c 网站开发环境谷歌绘制的网站
  • 杭州正晖建设工程有限公司网站百度关键词优化软件如何
  • 网站是什么时候开始的下载网站后怎么做
  • 网站建设战略规划的方法福州微信网站
  • 住房城乡建设厅网站iis2008如何做网站
  • 商城网站网站开发常州小程序开发公司