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

从化区城郊街道网站麻二村生态建设自动免费设计logo

从化区城郊街道网站麻二村生态建设,自动免费设计logo,网络运维工程师工作内容,做网站就来厚博互联目录 先说原理: 再上代码: 运行结果: 先说原理: ThreadLocal 是一个本地线程副本变量工具类,它可以在每个线程中创建一个副本变量,每个线程可以独立地修改自己的副本变量,而不会影响其他线程…

目录

先说原理:

再上代码:

运行结果:


先说原理:

ThreadLocal 是一个本地线程副本变量工具类,它可以在每个线程中创建一个副本变量,每个线程可以独立地修改自己的副本变量,而不会影响其他线程的副本变量。它的实现原理可以简单概括如下:

  1. ThreadLocal 内部维护了一个 Map 对象,用于存储每个线程的副本变量。Map 的键为线程对象,值为对应线程的副本变量。
  2. 在每个线程中,ThreadLocal 实例会创建一个唯一的 ThreadLocalMap 对象,用于存储该线程的所有副本变量。ThreadLocalMap 是一个自定义的哈希表数据结构继承自 WeakReference,它的键为 ThreadLocal 对象,值为对应线程的副本变量。
  3. 在创建 ThreadLocal 实例时,实际上是在当前线程的 ThreadLocalMap 中新增一个键值对,其中键为当前 ThreadLocal 对象,值为初始化的副本变量。
  4. 当需要获取当前线程的副本变量时,ThreadLocal 实例会先获取当前线程的 ThreadLocalMap,再通过当前 ThreadLocal 对象作为键来获取对应的副本变量。由于每个线程独立维护自己的 ThreadLocalMap,所以不同线程的相同 ThreadLocal 对象对应的副本变量也是不同的。
  5. 当一个线程结束时,它持有的所有 ThreadLocalMap 中的键值对会成为垃圾对象,但由于 ThreadLocalMap 的键是 WeakReference 类型,所以这些键可能被垃圾回收器回收,但值对象不会被回收,从而导致内存泄漏。为了解决这个问题,ThreadLocal 内部使用了 ThreadLocalMapexpungeStaleEntry() 方法,定期清除废弃的键值对。

总的来说,ThreadLocal 通过维护一个 Map,为每个线程创建一个独立的 ThreadLocalMap,并使用弱引用来避免内存泄漏,从而实现了在每个线程中创建独立的副本变量,并提供了线程安全的访问方式。

再上代码:

package cn.net.cdsz.ccb.test;import java.io.IOException;
import java.io.PipedReader;
import java.io.PipedWriter;public class test {static class ThreadA implements Runnable {private ThreadLocal<String> threadLocal;public ThreadA(ThreadLocal<String> threadLocal) {this.threadLocal = threadLocal;}@Overridepublic void run() {threadLocal.set("A");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("ThreadA输出:" + threadLocal.get());}}static class ThreadB implements Runnable {private ThreadLocal<String> threadLocal;public ThreadB(ThreadLocal<String> threadLocal) {this.threadLocal = threadLocal;}@Overridepublic void run() {threadLocal.set("B");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("ThreadB输出:" + threadLocal.get());}}public static void main(String[] args) {ThreadLocal<String> threadLocal = new ThreadLocal<>();new Thread(new ThreadA(threadLocal)).start();new Thread(new ThreadB(threadLocal)).start();}}

运行结果:

最常⻅的ThreadLocal使⽤场景为⽤来解决数据库连接、Session管理等。数据库连
接和Session管理涉及多个复杂对象的初始化和关闭。如果在每个线程中声明⼀些
私有变量来进⾏操作,那这个线程就变得不那么“轻量”了,需要频繁的创建和关闭
连接。

http://www.15wanjia.com/news/179289.html

相关文章:

  • 温州开发网站公司一件代发的货源怎么找
  • 一个网站的首页包括什么企业为什么要交税
  • 成都网站建设单招网wordpress万网m3
  • 沙河企业做网站怎么用网页源码做网站
  • 网站注册 优帮云网站微信登录怎么做
  • 蓝色大气企业网站模板苏州外贸网站建设公司
  • 渝水区城乡建设局网站wordpress去除google
  • 别人做的网站域名到期怎么办网站功能模块是什么
  • 开源saas多用户建站系统建站总结报告
  • 服务器网站管理软件酒店网站制作公司
  • 长春做网站哪家便宜企业名录免费查询器下载
  • 学校的网站如何建设方案自学网页设计有前途吗
  • 昆明做网站做的好的公司百度口碑官网
  • 咸阳网站建设xymokj做农业需关注什么网站
  • 我是怎么做网站架构的建立个人网站
  • 网站开发运用的技术有网站吗给一个
  • 上海网站排名优化推荐wordpress短视频模版
  • 社交媒体 网站舆情监测关键词
  • 最专业的做音乐网站媒体发稿
  • 广西玉林建设厅官方网站大宗贸易交易平台
  • 如何接单做网站网站建设 提供源码
  • 天津网站建设培训学校有没有好用的网站推荐
  • 完整的app网站开发什么网站可以免费做视频
  • 美容网站设计百度做网站的特点
  • net网站阿里云主机配置国际热点新闻最新消息
  • 网站设计规划书例子最牛的大型网站建设公司
  • 横岗网站设计安康市建设银行网站
  • 深圳网站设计哪家比较好如何做静态页网站
  • 爱站网 关键词挖掘工具站长工具七牛图片水印 wordpress
  • 建网站平台要多少钱赵公口网站建设公司