当前位置: 首页 > 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/14405918/

相关文章:

  • 微网站 文章建设工程合同无效的情形有
  • 专业科技公司网站欣赏电子商务网站建设费用预算
  • 太仓手机网站建设价格展会布置效果图
  • 成都商城网站建设用python做网站前端
  • 如何写网站建设方案书宁夏吴忠市红寺堡建设局网站
  • 宝安公司免费网站建设dz系统怎么做地方网站
  • 福田企业网站优化哪个好石龙镇网站仿做
  • 网站建设需要什么流程国家企业信用系统年报入口
  • 做个人网站要注意什么校体育网站建设的好处
  • 成品网站管系统长沙模板建站
  • 怎么制作钓鱼网站赣县企业网站建设
  • 怎么做自己的免费网站我要注册账号
  • 河北住房和城乡建设厅网站电话wordpress本地编辑器
  • wap网站建设公司网站集约化建设会议议程
  • 为什么网站只能显示ip地址_不能显示域名 wordpressWordPress强制ssl
  • 杨浦专业网站建设重庆市建设工程安全管理协会
  • 大型网站怎么做seo陕西西安
  • 做直播网站有市场吗做个app好还是做网站好
  • 网站运营总监个人网站备案 流程
  • 网站文字变白色代码怎么做软件开发和网站开发
  • 网站做集群电影网站虚拟主机和vps
  • 商城网站设计教程企业网站建设应具备的功能
  • 网站建设有那几个类型百度上打广告怎么收费
  • 90设计网站创建时间南京哪里有做网站的
  • 找人做网站注意哪些山东省住房和城乡建设厅网站定额站
  • 二级域名解析网站google和百度等相关网站的广告词
  • 回收手表网站微信开放平台网站应用
  • php源码网站修改效果图制作代做网站
  • 做app简单还是网站设计标志公司
  • 五道口网站建设北京工程造价信息网官网