java多线程——ThreadLocal
来源:互联网 发布:淘宝金三塔官方旗舰店 编辑:程序博客网 时间:2024/05/17 04:28
ThreadLocal介绍
ThreadLocal可以创建只能由同一线程读取和写入的变量。因此,即使两个线程正在执行相同的代码,并且代码具有对 ThreadLocal变量的引用,那么这两个线程不能看到对方的ThreadLocal变量。实际上ThreadLocal的值是放入了当前线程的一个ThreadLocalMap实例中,所以只能在本线程中访问,其他线程无法访问。
可以创建一个指定泛型类型的ThreadLocal对象,这样我们就不需要每次使用get()方法返回的值做强制类型转换。
ThreadLocal优势
ThreadLocal并不是用来并发控制访问一个共同对象,而是为了给每个线程分配一个只属于该线程的对象,更准确的说是为了实现线程间的数据隔离。而ThreadLocal应用场景更多是想共享一个变量,但是该变量又不是线程安全的,那么可以用ThreadLocal维护一个线程一个实例。有时候ThreadLocal也可以用来避免一些参数传递,通过ThreadLocal来访问对象。
threadlocal 常用方法
1、public void set(T value):将值放入线程局部变量中
2、public T get():从线程局部变量中获取值
3、public void remove():从线程局部变量中移除值(有助于 JVM 垃圾回收)
4、protected T initialValue():返回线程局部变量中的初始值(默认为 null,可以在新建对象时重写initialValue方法)
应用场景
实现单个线程单例以及单个线程上下文信息存储
实现线程安全,非线程安全的对象使用ThreadLocal之后就会变得线程安全,因为每个线程都会有一个对应的实例(比如SimpleDateFormat不能直接用作静态变量,线程不安全,但可以使用threadlocal将其改为线程安全的来使用)
承载一些线程相关的数据,避免在方法中来回传递参数
示例代码
public class ThreadLocalPractice { public static void main(String[] args){ new Thread(new MyThread()).start(); new Thread(new MyThread()).start(); }}class MyThread implements Runnable{ private ThreadLocal<Integer> threadLocal = new ThreadLocal<>(); public void run(){ threadLocal.set((int)(Math.random()*1000)); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + ": " + threadLocal.get()); }}
参考资料
Java ThreadLocal
理解Java中的ThreadLocal
- Java多线程——ThreadLocal
- java多线程——ThreadLocal
- Java多线程——2 ThreadLocal
- Java多线程——ThreadLocal类
- java多线程之——ThreadLocal
- Java多线程(10)——ThreadLocal
- 跟我学Java多线程——ThreadLocal
- Java——多线程总结、ThreadLocal/Volatile/synchronized/Atomic关键字
- Java 多线程(九)——ThreadLocal类
- Java线程和多线程(七)——ThreadLocal
- Java 多线程(九)——ThreadLocal类
- 跟我学Java多线程——ThreadLocal
- Java多线程之ThreadLocal
- Java多线程之ThreadLocal
- JAVA多线程之ThreadLocal
- JAVA多线程----ThreadLocal
- Java多线程之 ThreadLocal
- Java多线程中的ThreadLocal
- 【天梯赛】L2-006. 树的遍历(层次遍历)
- PAT甲级1001题解
- Qt工程转VS工程
- java下载工具类,支持断点续传
- [DP] Tsin A1315 积木
- java多线程——ThreadLocal
- kubernetes单个pod运行两个容器yaml文件实践
- DG物理备库的几种模式
- GCD小结
- git 常用命令
- java线程浅析[多线程同步]
- 仿写 Lite Struts
- 回溯法及其应用
- Group Anagrams