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

网站建设人员组成怎么做微信钓鱼网站吗

网站建设人员组成,怎么做微信钓鱼网站吗,php做网站首页修改,网页设计入门作品文章目录 ThreadLocal源码分析:set方法get方法remove方法 ThreadLocal内存泄漏问题 ThreadLocal ThreadLocal提供了线程局部变量,每个线程都可以通过set和get方法来对这个变量进行操作,但不会和其他线程的局部变量冲突,实现了线程…

文章目录

  • ThreadLocal
    • 源码分析:
      • set方法
      • get方法
      • remove方法
    • ThreadLocal内存泄漏问题

ThreadLocal

ThreadLocal提供了线程局部变量,每个线程都可以通过set和get方法来对这个变量进行操作,但不会和其他线程的局部变量冲突,实现了线程的数据隔离

源码分析:

set方法

public void set(T value) {Thread t = Thread.currentThread();//getMap就是为了获取当前线程的ThreadLocalMapThreadLocalMap map = getMap(t);if (map != null)//如果map存在就直接以这个ThreadLocal为键,设置键和值map.set(this, value);else//否则就为他创建一个ThreadLocalMap,并设置第一个键和值createMap(t, value);
}
ThreadLocalMap getMap(Thread t) {return t.threadLocals;
}
void createMap(Thread t, T firstValue) {t.threadLocals = new ThreadLocalMap(this, firstValue);
}

get方法

public T get() {Thread t = Thread.currentThread();ThreadLocalMap map = getMap(t);if (map != null) {//如果当前线程的ThreadLocalMap存在,就尝试获取对应键值对ThreadLocalMap.Entry e = map.getEntry(this);if (e != null) {@SuppressWarnings("unchecked")T result = (T)e.value;return result;}}//如果threadLocals不存在或者当前的ThreadLocal不存在于这个map中return setInitialValue();
}
private T setInitialValue() {T value = initialValue();Thread t = Thread.currentThread();ThreadLocalMap map = getMap(t);if (map != null)//当前ThreadLocal不存在于map中,就加上,设置value为空map.set(this, value);else//如果map不存在就创建,并设置键值createMap(t, value);return value;
}
protected T initialValue() {return null;
}

remove方法

public void remove() {ThreadLocalMap m = getMap(Thread.currentThread());if (m != null)m.remove(this);
}
private void remove(ThreadLocal<?> key) {Entry[] tab = table;int len = tab.length;int i = key.threadLocalHashCode & (len-1);for (Entry e = tab[i];e != null;e = tab[i = nextIndex(i, len)]) {if (e.get() == key) {//弱引用中的清除方法e.clear();//将key为null的键值对清除掉,get和set方法底层也有用到expungeStaleEntry(i);return;}}
}
private static int nextIndex(int i, int len) {return ((i + 1 < len) ? i + 1 : 0);
}

总结:

可以看出,ThreadLocal中并不存储值,只是作为一个key来让线程从ThreadLocalMap中获取value,从而实现了线程之间的数据隔离

  • 每个线程都维护着一个ThreadLocalMap,ThreadLocalMap是ThreadLocal的内部类
  • ThreadLocal中的set,实际上是向当前线程的ThreadLocalMap中设置值,键为创建的ThreadLocal对象

ThreadLocal内存泄漏问题

内存泄漏:程序中间动态分配了内存,但在程序结束时没有释放这部分内存,从而造成那部分内存不可用的情况

内存溢出:要求分配的内存超过了系统能给的

ThreadLocal中作为map中的key使用,而且ThreadLocalMap中的key是弱引用,弱引用对象在gc时会被回收,而ThreadLocalMap和Thread的生命周期一样长,就会存在key为null的情况,value访问不到,从而引发内存泄漏。所以,使用ThreadLocal时最后最好调用remove方法显式调用expungeStaleEntry方法手动删除key为null的value,防止value的积累

ThreadLocal的get和set方法某些时候也会调用expungeStaleEntry方法,但这是不及时的,而且不一定每次都会执行

http://www.yayakq.cn/news/706191/

相关文章:

  • 学校网站建设评分标准常州新北区网站建设
  • 深圳企业网站改版wordpress 古风主题
  • 湖北阳新县建设局网站想搞一个自己的网站怎么做
  • 网络初始网站Wordpress414错误
  • 网站建设维护是做什么会计科目wordpress别名404
  • h5商城网站开发360网站名片怎么做
  • 化妆品企业网站建设的缺点科技公司注册经营范围
  • 广州市网站建设制作江苏泰州海陵区建设局网站
  • 网站开发汇报ppt西安seo公司哪家好
  • 网站模板佳好乐云seowordpress idown主题
  • 浙江网站建设自助建站优化wordpress 评论框样式
  • 手机建个人网站产教融合平台建设网站
  • 怎么样自己做百度网站建站的好公司
  • 怎么为网站网页注册免费网址正规的培训学校
  • wordpress 仿站网站开发过程的分工
  • 手机上上建设网站dw织梦做网站
  • 做教学的视频网站wordpress音乐主题musik汉化
  • 广宏建设集团有限公司网站wordpress数据库有多大
  • 网站建设服务器介绍图片哪个好用?
  • 青海省高等级公路建设管局网站wordpress文章站
  • c sql网站开发直通车关键词优化口诀
  • 网站建设与维护的重要性最新新闻热点事件2023
  • 高要网站制作gooood谷德设计网站
  • 国内红酒网站建设推广公司简介
  • 贵州建设厅培训中心网站大丰做网站哪家最好
  • 深圳市住房和建设局网站住房什么是网络营销的概率
  • 手机端h5网站模板下载进入建设银行的网站就打不了字
  • 企业网站设计html平面设计平台接单
  • 什么叫网站app优惠券直播网站怎么做的
  • 东莞市生态环境局淘宝怎么优化关键词步骤