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

北京网站建设厂家中国建设人才专业服务网

北京网站建设厂家,中国建设人才专业服务网,wordpress更换子域名,登陆网站空间ThreadLocal 什么是ThreadLocal ThreadLoacal类可以为每个线程保存一份独有的变量#xff0c;该变量对于每个线程都是独占的。实现原理为每个Thread类中包含一个ThreadHashMap#xff0c;key为变量的对应的ThreadLocal对象#xff0c;value为变量的值。 在日常使用中该变量对于每个线程都是独占的。实现原理为每个Thread类中包含一个ThreadHashMapkey为变量的对应的ThreadLocal对象value为变量的值。 在日常使用中我们可以通过set(value)方法设置值然后通过get()方法获取值示例代码如下 我们通过线程池执行了五个线程每个线程都有一份自己独有的id变量实现了线程间的数据隔离。 Slf4j public class ThreadLocalTest {// ThreadLocal 变量每个线程都有自己的副本private static final ThreadLocalInteger id new ThreadLocal();Testpublic void testThreadLocal() {// 创建线程池ExecutorService executorService Executors.newCachedThreadPool();try {for (int i 0; i 5; i ) {int finalI i;executorService.execute(() - {// 设置ThreadLocal 变量 id.set(finalI);// 获取ThreadLocal变量log.info(The id of thread {} is {}, Thread.currentThread().getName(), id.get());});}} finally {id.remove();executorService.shutdown();}} }传统的HashMap是链地址法发生碰撞放入桶内ThreadLocalMap是开放地址法发生冲突放到后一位 实现原理 那如何实现这种线程间的数据隔离呢一种容易想到的方法是在Map中进行存储每个ThreadLocal变量内维护一个Map其中key为每个线程的IDvalue为对应的值。这样当调用get()方法时会通过hash算法找到对应线程的值。 jdk也确实是这么做的只不过存放元素Map的实现不是HashMap而是ThreadLocalMap解决冲突的做法是开放寻址法即出现冲突就往下一个临近位置找直到找到空位置。 早期的实现中多个线程会共享一个ThreadLocalMap这样随着线程数的增加map就需要扩容会消耗较多的资源 后来每个线程都有自己的一个ThreadLocalMap各自保存自己的局部变量key为变量名value为变量值。 因为局部变量很少所以一般不需要扩容。 内存泄漏 下面这张图是ThreadLocal对应的引用关系可以看到在新的设计下ThreadLocalMap存在于Thread中是和Thread的生命周期一致的。 ThreadLocalMap的key为ThreadLocal对象value是对应的值需要注意的是ThreadHashMap的key会使用弱引用这主要是为了当ThreadLocal为null后除了ThreadHashMap持有的弱引用外没有别的强引用ThreadLocal对象可以被GC回收。 但是这样就导致ThreadHashMap中对应的key为null其value引用的对象不会被GC回收从而出现了内存泄漏。 所以在使用完ThreadLocal变量后尽量使用remove()方法进行清理这样会把key为null的键值对删除。 再回到上面的示例上面的示例我们使用final修饰了ThreadLocal保证其不会被修改这样做会导致ThreadLocal永远存在强引用不会被释放容易发生内存泄露所以需要我们显示调用remove()方法进行清理。 参考链接 ThreadLocal的内存泄露什么原因如何避免
http://www.hkea.cn/news/14378053/

相关文章:

  • 旅游网站建设平台分析flash怎么做电子书下载网站
  • 企业网站建设的总体目标深圳网络优化培训
  • 个人备案门户网站郑州seo地址
  • 网站建设的收费标准网站开发建设流程
  • 自己怎么做返利网站微信营销和网站建设
  • 自己搭建一个博客网站做网站登录页面的论文
  • 怎么做社交网站引流到亚马逊建e室内设计网app
  • 怎样打造营销型网站建设天津seo培训班在哪里
  • 网站风格设计要素名校长工作室网站建设
  • 网站设计需求分析报告百度网盘官网下载
  • 社区网站做的比较好的有哪些html网页设计模板免费下载
  • 营销型网站推广服务怀化医保网站
  • 塑胶模具东莞网站建设响应式布局如何实现
  • 农林网站建设精品简历模板网站
  • 设计网站公司可去亿企邦网络信息安全网站开发教程
  • 百度给做网站收费多少钱学生如何自己做网站
  • 开发网站需要什么条件小水库运行管理培训教材久久建筑网
  • 微信网站制作免费平台大型网页游戏开发
  • 网站找哪些单位做实名认证网页制作公司南昌
  • 自助微信网站设计广东十大排名建筑公司
  • 深圳仿站定制模板建站全国分类信息网站排名
  • 博物馆网站 微信 微博 建设如何做小程序平台
  • app大全软件网站免费下载wordpress 主题 标签
  • seo怎么去优化网站微信小程序开发者社区
  • 可以做网站的软件上传歌曲东莞人才网招聘
  • 网站SEO建设摘要用模板怎么做网站
  • 网站开发人员资质网站开发技术合作协议书
  • 注册网站怎么做wordpress怎么做产品列表页
  • 重庆市网站备案材料wordpress零基础
  • 做游戏网站用什么软件2015做哪个网站能致富