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

自己制作网站在哪可以接企业网站建设的活

自己制作网站,在哪可以接企业网站建设的活,青岛开办公司要做网站吗,z怎么做优惠券网站文章目录 前言一、ThreadLocal 是什么#xff1f;二、有哪些使用场景#xff1f;三、实现原理四、在线程池中使用 ThreadLocal 为什么可能导致内存泄露呢#xff1f;五、线程池中#xff0c;如何正确使用 ThreadLocal#xff1f;六、ThreadLocal 核心方法 前言 一、Threa… 文章目录 前言一、ThreadLocal 是什么二、有哪些使用场景三、实现原理四、在线程池中使用 ThreadLocal 为什么可能导致内存泄露呢五、线程池中如何正确使用 ThreadLocal六、ThreadLocal 核心方法 前言 一、ThreadLocal 是什么 ThreadLocal 是线程本地存储在每个线程中都创建了一个 ThreadLocalMap 对象每个线程可以访问自己内部 ThreadLocalMap 对象内的 value。 二、有哪些使用场景 经典的使用场景是为每个线程分配一个 JDBC 连接 Connection。这样就可以保证每个线程的都在各自的 Connection 上进行数据库的操作不会出现 A 线程关了 B线程正在使用的 Connection 还有 Session管理等问题。 ThreadLocal 使用例子 public class TestThreadLocal {//线程本地存储变量private static final ThreadLocalInteger THREAD_LOCAL_NUM new ThreadLocalInteger() {Overrideprotected Integer initialValue() {return 0;}};public static void main(String[] args) {for (int i 0; i 3; i) {//启动三个线程Thread t new Thread() {Overridepublic void run() {add10ByThreadLocal();}};t.start();}}/*** 线程本地存储变量加 5*/private static void add10ByThreadLocal() {for (int i 0; i 5; i) {Integer n THREAD_LOCAL_NUM.get();n 1;THREAD_LOCAL_NUM.set(n);System.out.println(Thread.currentThread().getName() : ThreadLocal num n);}}}打印结果启动了 3 个线程每个线程最后都打印到 “ThreadLocal num5”而不是 num 一直在累加直到值等于 15 Thread-0 : ThreadLocal num1 Thread-1 : ThreadLocal num1 Thread-0 : ThreadLocal num2 Thread-0 : ThreadLocal num3 Thread-1 : ThreadLocal num2 Thread-2 : ThreadLocal num1 Thread-0 : ThreadLocal num4 Thread-2 : ThreadLocal num2 Thread-1 : ThreadLocal num3 Thread-1 : ThreadLocal num4 Thread-2 : ThreadLocal num3 Thread-0 : ThreadLocal num5 Thread-2 : ThreadLocal num4 Thread-2 : ThreadLocal num5 Thread-1 : ThreadLocal num5三、实现原理 按照我们第一直觉感觉 ThreadLocal 内部肯定是有个 Map 结构key 存了 Threadvalue 存了 本地变量 V 的值。每次通过 ThreadLocal 对象的 get() 和 set(T value) 方法获取当前线程里存的本地变量、设置当前线程里的本地变量。 而 JDK 的实现里面这个 Map 是属于 Thread而非属于 ThreadLocal。ThreadLocal 仅是一个代理工具类内部并不持有任何与线程相关的数据所有和线程相关的数据都存储在 Thread 里面。ThreadLocalMap 属于 Thread 也更加合理。 还有一个更加深层次的原因这样设计不容易产生内存泄露。 ThreadLocal 持有的 Map 会持有 Thread 对象的引用只要 ThreadLocal 对象存在那么 Map 中的 Thread 对象就永远不会被回收。ThreadLocal 的生命周期往往比线程要长所以这种设计方案很容易导致内存泄露。 JDK 的实现中 Thread 持有 ThreadLocalMap而且 ThreadLocalMap 里对 ThreadLocal 的引用还是弱引用WeakReference所以只要 Thread 对象可以被回收那么 ThreadLocalMap 就能被回收。JDK 的这种实现方案复杂但更安全。 四、在线程池中使用 ThreadLocal 为什么可能导致内存泄露呢 在线程池中线程的存活时间太长往往都是和程序同生共死的这样 Thread 持有的 ThreadLocalMap 一直都不会被回收再加上 ThreadLocalMap 中的 Entry 对 ThreadLocal 是弱引用WeakReference所以只要 ThreadLocal 结束了自己的生命周期是可以被回收掉的。 Entry 中的 Value 是被 Entry 强引用的即便 value 的生命周期结束了value 也是无法被回收的导致内存泄露。 五、线程池中如何正确使用 ThreadLocal 在 finally 代码块中手动清理 ThreadLocal 中的 value调用 ThreadLocal 的 remove()方法。 六、ThreadLocal 核心方法 设置 Thread 对应的 Value 值首次会创建一个 ThreadLocalMap 添加 ThreadLocal - Value 到 ThreadLocalMap 中并且绑定 ThreadLocalMap 到当前线程。 public void set(T value) {Thread t Thread.currentThread();ThreadLocalMap map getMap(t);if (map ! null)map.set(this, value);elsecreateMap(t, value); } 创建 ThreadLocalMap绑定到当前线程。 void createMap(Thread t, T firstValue) {t.threadLocals new ThreadLocalMap(this, firstValue); } 通过 ThreadLocalMap 获取当前线程的存储的 Value 值 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(); } 设置 ThreadLocal 的初始化值未 set(T value) 初次获取 Thread 对应的 Value 值时会调用即被 setInitialValue 方法调用。需要重写该方法。 protected T initialValue() {return null; }移除当前线程存储的 Value 值。当 ThreadLocal 不在使用最好在 finally 语句块中调用 remove() 方法释放去 Value 的引用避免内存泄露。 public void remove() {ThreadLocalMap m getMap(Thread.currentThread());if (m ! null)m.remove(this); }
http://www.w-s-a.com/news/552852/

相关文章:

  • 广州网站优化系统怎么做淘客网站
  • 类似凡科互动的网站wordpress网站下载
  • 临沂网站制作公司安卓app开发实例教程
  • 泰州做网站 泰公网络科技公司网站升级中html
  • 如何做授权网站网站设计心得
  • 网站排名快速上升wordpress自动标签页
  • 做的好的手机网站有哪些万网域名交易
  • 网站怎么做漂亮点做陶瓷的公司网站
  • 软件开发设计制作网站下载自己怎么做视频收费网站
  • 江苏省建设安全协会网站天津网站建设哪家公司好
  • 资源类网站怎么做的网站上线准备工作
  • 长沙专业网站建设怎么做企业建站公司服务
  • 肇庆市有限公司网站建设手机直接看的网站有哪些
  • 织梦修改网站后备份英语作文模板高中
  • 个人网站域名用什么好上海公司拍沪牌需要什么条件
  • 网站建设 保密做网站赚钱交税
  • 食品建设网站前的市场分析进出口网站贸易平台有哪些
  • php商城网站建设个人网站用什么服务器
  • 如何做好品牌网站建设方案网站开发的学习
  • 网站开发 管理方案wordpress怎么搭建微博
  • 有哪些ui的设计网站网上商城网站建设设计方案
  • iis中怎样配置网站绑定运城可以做网站的公司
  • 品牌网站建设开发价格dedecms电影网站模板
  • 网站设计外包合同帝国网站后台认证码错误
  • 网站设计公司深圳怎么免费做公司网站
  • 90设计网站几次是什么意思swipe类网站
  • 安康微网站建设网站域名使用费用
  • 网站建设执招标评分表微信代理网站模板
  • ps做网站分辨率自适应地方网站盈利
  • 免费自助小型网站专业网站建设组织