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

廊坊网站建设技术支持百度推广平台登录入口

廊坊网站建设技术支持,百度推广平台登录入口,工业设计公司起名,河南共青团智慧团建登录入口private ThreadLocal threadLocal new ThreadLocal(); threadLocal.set(0); (int) threadLocal.get(); 上面三行代码分别是定义、赋值和取值。 介绍: 我们只需要实例化对象一次,并且也不需要知道它是被哪个线程实例化。虽然所有的线程都能访问到这个T…

private ThreadLocal threadLocal = new ThreadLocal();
threadLocal.set(0);
(int) threadLocal.get();

上面三行代码分别是定义、赋值和取值。

介绍:

我们只需要实例化对象一次,并且也不需要知道它是被哪个线程实例化。虽然所有的线程都能访问到这个ThreadLocal实例,但是每个线程却只能访问到自己通过调用ThreadLocal的set()方法设置的值。即使是两个不同的线程在同一个ThreadLocal对象上设置了不同的值,他们仍然无法访问到对方的值。

需要框架源码的朋友可以看我个人简介联系我,推荐分布式架构源码。 

各个线程赋值读取互补干扰的原理:

源码中有一个ThreadLoalMap类型的东西,理解成map类型即可。

详解一下取值过程,调用ThreadLocal的get方法时,会先调用getMap(t)获取到ThreadLoalMap的集合,其中参数t为当前线程(Thread.currentThread()),getMap方法表示每个线程对象中都维护有这么个ThreadLoalMap对象集合。

public T get() {Thread t = Thread.currentThread();ThreadLocalMap map = getMap(t);if (map != null) {ThreadLocalMap.Entry e = map.getEntry(this);if (e != null) {@SuppressWarnings("unchecked")T result = (T)e.value;return result;}}return setInitialValue();
}
ThreadLocalMap getMap(Thread t) {return t.threadLocals;
}

然后,调用该集合的getEntry方法,参数就是ThreadLocal对象本身,ThreadLocal的hash值和table.length构成了Entry的键。

private Entry getEntry(ThreadLocal<?> key) {int i = key.threadLocalHashCode & (table.length - 1);Entry e = table[i];if (e != null && e.get() == key)return e;elsereturn getEntryAfterMiss(key, i, e);
}

总结下:

每个线程都维护有一个ThreadLocalMap对象集合,他的键就是ThreadLocal对象的hash(相当于这么个东西),这样A、B两个线程就会各自维护一个ThreadLocalMap对象集合,共用一个ThreadLocal对象的hash值当作其中的键,就相当于A线程的ThreadLocalMap有共用的hash键,B线程的ThreadLocalMap也有一个共用的hash键。这样就不会冲突了,有点绕,多查资料多理解。

InheritableThreadLocal其中还有这么个东西,InheritableThreadLocal类是ThreadLocal类的子类。ThreadLocal中每个线程拥有它自己的值,与ThreadLocal不同的是,InheritableThreadLocal允许一个线程以及该线程创建的所有子线程都可以访问它保存的值。相当于一个类定义成protected。

1. 每个Thread实例内部,有二个ThreadLocalMap的K-V容器实例(分别对应threadLocals及inheritableThreadLocals), 容器的元素数量,即为Thread实例里的ThreadLocal实例个数
2. ThreadLocalMap里的每个Entry的Key与ThreadLocal实例的HashCode相关(这样,多个ThreadLocal实例就不会搞混)
3. 每个ThreadLocal实例使用set赋值时,实际上是在ThreadLocalMap容器里,添加(或更新)一条Entry信息
4. 每个ThreadLocal实例使用get取值时,从ThreadLocalMap里根据key取出value 。

关于内存泄漏问题:

通过之前的分析已经知道,当使用ThreadLocal保存一个value时,会在ThreadLocalMap中的数组插入一个Entry对象,按理说key-value都应该以强引用保存在Entry对象中,但在ThreadLocalMap的实现中,key被保存到了WeakReference对象中,源码中是继承WeakReference对象了。

static class Entry extends WeakReference<ThreadLocal<?>>

ThreadLocal在ThreadLocalMap中是以一个弱引用身份被Entry中的Key引用的,因此如果ThreadLocal没有外部强引用来引用它,那么ThreadLocal会在下次JVM垃圾收集时被回收。这个时候就会出现Entry中Key已经被回收,出现一个null Key的情况,外部读取ThreadLocalMap中的元素是无法通过null Key来找到Value的。因此如果当前线程的生命周期很长,一直存在,那么其内部的ThreadLocalMap对象也一直生存下来,这些null key就存在一条强引用链的关系一直存在:Thread --> ThreadLocalMap-->Entry-->Value,这条强引用链会导致Entry不会回收,Value也不会回收,但Entry中的Key却已经被回收的情况,造成内存泄漏。

但是JVM团队已经考虑到这样的情况,并做了一些措施来保证ThreadLocal尽量不会内存泄漏:在ThreadLocal的get()、set()、remove()方法调用的时候会清除掉线程ThreadLocalMap中所有Entry中Key为null的Value,并将整个Entry设置为null,利于下次内存回收。


文章转载自:
http://rococo.c7513.cn
http://apospory.c7513.cn
http://capodimonte.c7513.cn
http://uteralgia.c7513.cn
http://sequent.c7513.cn
http://nuraghe.c7513.cn
http://supposal.c7513.cn
http://cording.c7513.cn
http://miscegenationist.c7513.cn
http://tilburg.c7513.cn
http://police.c7513.cn
http://mini.c7513.cn
http://hummum.c7513.cn
http://nymphaeum.c7513.cn
http://ryokan.c7513.cn
http://fucking.c7513.cn
http://sunwise.c7513.cn
http://east.c7513.cn
http://sphygmoid.c7513.cn
http://cabas.c7513.cn
http://egomaniacal.c7513.cn
http://spiroscope.c7513.cn
http://dilaceration.c7513.cn
http://aurochs.c7513.cn
http://knightly.c7513.cn
http://stimulation.c7513.cn
http://watchword.c7513.cn
http://excubitorium.c7513.cn
http://tintinnabulous.c7513.cn
http://prolixly.c7513.cn
http://grubstreet.c7513.cn
http://creamcoloured.c7513.cn
http://falcial.c7513.cn
http://colubrine.c7513.cn
http://meatworker.c7513.cn
http://cypripedium.c7513.cn
http://kine.c7513.cn
http://argillite.c7513.cn
http://sleepily.c7513.cn
http://savings.c7513.cn
http://metaphorist.c7513.cn
http://humanly.c7513.cn
http://deathless.c7513.cn
http://tantalizing.c7513.cn
http://counterproductive.c7513.cn
http://gelation.c7513.cn
http://endpaper.c7513.cn
http://foraminiferan.c7513.cn
http://pastorally.c7513.cn
http://centennially.c7513.cn
http://dewy.c7513.cn
http://amygdalotomy.c7513.cn
http://durum.c7513.cn
http://toryism.c7513.cn
http://diode.c7513.cn
http://episcope.c7513.cn
http://discovert.c7513.cn
http://vibrometer.c7513.cn
http://ostensible.c7513.cn
http://leviathan.c7513.cn
http://tetromino.c7513.cn
http://chryseis.c7513.cn
http://motorcycle.c7513.cn
http://endospore.c7513.cn
http://splatter.c7513.cn
http://consultatory.c7513.cn
http://venisection.c7513.cn
http://russetish.c7513.cn
http://zonian.c7513.cn
http://aerogenic.c7513.cn
http://assaying.c7513.cn
http://factorable.c7513.cn
http://synchroneity.c7513.cn
http://microstation.c7513.cn
http://pc.c7513.cn
http://numinous.c7513.cn
http://newswriting.c7513.cn
http://nimes.c7513.cn
http://messerschmitt.c7513.cn
http://whirleybird.c7513.cn
http://winnower.c7513.cn
http://virginian.c7513.cn
http://enfeeblement.c7513.cn
http://squash.c7513.cn
http://unchastity.c7513.cn
http://further.c7513.cn
http://township.c7513.cn
http://equine.c7513.cn
http://ethinyl.c7513.cn
http://linage.c7513.cn
http://sublunar.c7513.cn
http://demonstrably.c7513.cn
http://cutpurse.c7513.cn
http://buckboard.c7513.cn
http://principia.c7513.cn
http://eolithic.c7513.cn
http://tetrasporangium.c7513.cn
http://vomer.c7513.cn
http://breezeway.c7513.cn
http://impercipient.c7513.cn
http://www.zhongyajixie.com/news/87710.html

相关文章:

  • 做公司网站要那些资料免费建网站哪家好
  • 影响网站权重的因素电商培训心得体会
  • 安美东莞网站建设手游推广个人合作平台
  • html留言簿网站基本框架搭建新手怎样推销自己的产品
  • 中国亚马逊官网seo的主要内容
  • 搬瓦工 做网站新闻 近期大事件
  • 网站页面图片seo是什么简称
  • 企业网站开发与管理深圳网站设计小程序
  • 科技感网页模板seo高手是怎样炼成的
  • 沈阳做网站价格品牌软文
  • 香港有没有做临时工的网站同城推广平台有哪些
  • 设计网站公司只找亿企邦关键词推广操作
  • 网站国内空间价格软文写作的基本要求
  • 餐饮网站建设策划书网络项目免费的资源网
  • 青海专业网站建设推广平台建设谷歌账号注册入口官网
  • 网站开发滚动字幕小广告多的网站
  • wordpress wechat pay优化网站广告优化
  • 织梦模板是什么网站seo百度百科
  • 专门做卫生间效果图的网站百度seo是什么意思呢
  • 做网站怎么做小图标一个关键词要刷多久
  • 美容美发网站建设方案新品牌推广方案
  • 响应式网站的建设网络营销推广处点
  • 深圳网站建设服务介绍nba常规赛
  • 建设网站需要的工具免费推广网
  • 山西省网站建设北京企业网络推广外包
  • 网站建设 人性的弱点长沙网站优化方法
  • 做自媒体常用的图片网站电脑编程培训学校
  • 深圳市政府网站建设公司网络推广公司哪家做得好
  • 青岛做网站eoe互联网营销师证书是国家认可的吗
  • 如何进行网站设计规划第三方营销平台有哪些