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

男女的做那个视频网站咖啡的营销推广软文

男女的做那个视频网站,咖啡的营销推广软文,免费注册二级域名网站,公司企业做网站好做吗目录 1.说明 2.弱引用的说明 3.最佳实践 4.方法说明 1.说明 在每个Thread中包含一个threadlocalmap对象,ThreadLocalMap是TheadLocal的静态内部类 threadLocalMap内部是一个entry数组 每个entry的key是TheadLoca实例,key是一个弱引用 每个entry的va…

目录

1.说明

2.弱引用的说明

3.最佳实践

4.方法说明


1.说明

在每个Thread中包含一个threadlocalmap对象,ThreadLocalMap是TheadLocal的静态内部类

threadLocalMap内部是一个entry数组
每个entry的key是TheadLoca实例,key是一个弱引用
每个entry的value是设置的内容,是强引用

如果在方法中new 一个threadlocal实例时,内存占用如下:

+------------------+     +-------------------+     +-----------------------+
|  方法栈帧         |     |  堆内存           |     |  线程的 ThreadLocalMap |
|                  |     |                   |     |                       |
| threadLocal 引用 ──────> ThreadLocal实例    |     | +-------------------+ |
+------------------+     +-------------------+     | | Entry:            | || | Key:  弱引用ThreadLocal || | Value:强引用"value"  | || +-------------------+ |+-----------------------+

当方法结束后,方法栈帧弹出,这时ThreadLocal对象的引用消失,ThreadLocalMap中的Key(ThreadLocal对象)是弱引用(WeakReference)。

当外部对ThreadLocal的强引用消失后,GC回收时发现无强引用指定,

仅有 Entry 的弱引用指向
→ 立即回收 Key 对象,并将 Entry 的 Key 置为 null(弱引用自动被清除)。
虽然 Key 被回收,但 Entry 中的 value 仍是强引用,此时会形成:
Entry { key=null, value="SomeValue" } // Value 无法被访问,存在内存泄漏风险

2.弱引用的说明

弱引用特性:当 JVM 进行垃圾回收时,如果 Key 仅被弱引用指向(没有强引用),无论内存是否充足,都会回收该 Key 对象。 

为什么设计为弱引用?

主要目的:防止开发者忘记调用 remove() 时,ThreadLocal 对象本身无法被回收。

    如果 Key 是强引用:即使开发者不再使用 ThreadLocal,由于线程的 ThreadLocalMap 持有强引用,ThreadLocal 对象和 Value 会永远无法回收。

    弱引用设计是一种兜底机制,至少能回收 Key,但需配合 remove() 彻底清理。

3.最佳实践

①使用static + final 定义threadlocal实例

// 推荐:static + final 修饰
private static final ThreadLocal CONTEXT_HOLDER = new ThreadLocal<>();

static 确保全局唯一实例,避免重复创建,不是对象属性,而是类的属性,一直持有引用,除非类被卸载,final 防止意外修改引用

②使用完成后执行remove处理

try {
CONTEXT_HOLDER.set(value);
} finally {
CONTEXT_HOLDER.remove(); // 必须清理
}

remove处理会清楚key和value,确保可以被回收

4.方法说明

get方法:

    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();}
  1. 获取当前线程
  2. 根据线程获取线程的threadlocalmap变量
  3. 如果为空,代表首次赋值,会创建一个threadlocalmap实例,key设置为threadlocal实例,并将值保存为null
  4. 如果不为空,则根据threadlocal实例获取对应的内容

set方法:

    public void set(T value) {Thread t = Thread.currentThread();ThreadLocalMap map = getMap(t);if (map != null)map.set(this, value);elsecreateMap(t, value);}
  1. 获取当前线程
  2. 获取线程的threadlocalmap变量
  3. 如果不为空,key设置为threadlocal实例,并将值保存为参数中传递的内容
  4. 如果为空,会创建一个threadlocalmap实例,key设置为threadlocal实例,并将值保存为参数中传递的内容

remove方法:

    public void remove() {ThreadLocalMap m = getMap(Thread.currentThread());if (m != null)m.remove(this);}

 会清除key及value,并且无效Entry被清理

http://www.dtcms.com/a/608363.html

相关文章:

  • 廊坊哪里做网站好自己的网站怎么接广告
  • 网站开发的职业目标山东天元集团有限公司
  • 呼和浩特建站凡客建站
  • 如何创建网站教程杭州公司注册代理中介
  • 网站制作软件下载wordpress留言板设置
  • 国内比较好的软文网站frontpage导入网站
  • 网站建设市场推广招聘中国经济网人事
  • 网站登录界面模板可以做区块链推广的网站
  • 宁波网站开发公司怎么样全国精品课程建设网站
  • 室内设计毕业设计代做网站工作服定做工厂
  • 监控安防的网站怎么做西安网络科技有限公司有哪些
  • 阿里巴巴的网站建设衡水seo网站建设优化排名
  • 怎样进网站空间服务器哈尔滨服务最好的网站优化公司
  • 游戏网站开发名字接做网站需要问什么条件
  • 哪个网站可以卖自己做的模型怎样上百度做广告
  • 校园网站集群建设网站开发工程师的工作内容
  • wordpress 搬家 sae前端seo主要优化哪些
  • 怎样把网站做的好看厦门网站排名优化费用
  • 做关于车的网站好文化建设的具体措施
  • 南京哪家做电商网站返利网app网站开发
  • 国外网站平台有哪些广西远昌建设公司
  • 做设计兼职的网站有哪些工作wordpress 集赞系统
  • 南昌网站建设行情怎样找到正规代加工网站
  • asp 网站访问统计wordpress 评论头像
  • 广州 骏域网站建设微网站设计基本要求
  • 兰州网站排名哪家公司好金泉网网站建设
  • 宁波网站推广宣传常宁网页设计
  • 用一部手机制作网站建销售网站需要多少钱
  • 网站图片移动怎么做石家庄热搜
  • 网站建设案例收费吗网站策划岗位要求