Java中的ThreadLocal的使用与原理

本文深入探讨了Java中的ThreadLocal,解释了其作为线程局部变量的作用,与synchronized的区别,以及ThreadLocalMap的工作原理。特别强调了ThreadLocal使用弱引用以防止内存泄漏,并给出了最佳实践建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Threadlocal

本文主要介绍ThreadLocal的基本使用与底层原理,欢迎大家相互学习与指正。

1.ThreadLocal定义

ThreadLocal是线程的局部变量,即使用ThreadLocal可以使用变量成为当前线程所独有的,对其他线程隔离。

ThreadLocal提供线程本地的实例,它与普通线程的区别:每个使用该变量的线程都会初始化一个完成独立的实例副本。

ThreadLocal变量通常用private static修饰,适用于变量在线程间隔离而在方法与类间共享的情况。

2.ThreadLocal与synchronized的区别:

都可以解决多线程并发访问的安全问题。

sy用于线程间数据的共享,th用于线程间数据的隔离。

sy利用锁机制,使变量或代码块某一时刻只能被一个线程访问,th为线程都提供了变量的副本。

3.ThreadLocal底层

ThreadLocal是一个对象,数据真正是存放在ThreadLocal内部的类型为ThreadLocalMap的一个map上,由Thread管理(Thread.threadlocals)

在这里插入图片描述

ThreadLocalMap将数据以Entry的键值对的形式保存,key是ThreadLocal,value是我们要保存的值。

ThreadLocalMap表的初始长度是16,当长度大于当前表长度^2/3时就扩容,扩容为原来的两倍。

Entry在table中的索引根据Thr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值