最近看Android FrameWork层代码,看到了ThreadLocal这个类,有点儿陌生,就翻了各种相关博客一一拜读;自己随后又研究了一遍源码,发现自己的理解较之前阅读的博文有不同之处,所以决定自己写篇文章说说自己的理解,希望可以起到
最近看Android FrameWork层代码,看到了ThreadLocal这个类,有点儿陌生,就翻了各种相关博客一一拜读;自己随后又研究了一遍源码,发现自己的理解较之前阅读的博文有不同之处,所以决定自己写篇文章说说自己的理解,希望可以起到以下作用:
- 可以疏通研究结果,加深自己的理解;
- 可以起到抛砖引玉的作用,帮助感兴趣的同学疏通思路;
- 分享学习经历,同大家一起交流和学习。
一、 ThreadLocal 是什么
ThreadLocal 是Java类库的基础类,在包java.lang下面;
官方的解释是这样的:
Implements a thread-local storage, that is, a variable for which each thread has its own value. All threads share the same ThreadLocal object, but each sees a different value when accessing it, and changes made by one thread do not affect the other threads. The implementation supports null values.
大致意思是:
可以实现线程的本地存储机制,ThreadLocal变量是一个不同线程可以拥有不同值的变量。所有的线程可以共享同一个ThreadLocal对象,但是不同线程访问的时候可以取得不同的值,而且任意一个线程对它的改变不会影响其他线程。类实现是支持null值的(可以在set和get方法传递和访问null值)。
概括来讲有三个特性:
- 不同线程访问时取得不同的值
- 任意线程对它的改变不影响其他线程
- 支持null
下面分别对这些特性进行实例验证,首先定义一个Test类,在此类中我们鉴证上边所提到的三个特性。类定义如下:
Test.java
public class Test{//定义ThreadLocal private static ThreadLocal name;public static void main(String[] args) throws Exception{name = new ThreadLocal();//Define Thread AThread a = new Thread(){public void run(){System.out.println("Before invoke set,value is:"+name.get());name.set(“Thread A”);System.out.println("After invoke set, value is:"+name.get());}};//Define Thread BThread b = new Thread(){public void run(){System.out.println("Before invoke set,value is :"+name.get());name.set(“Thread B”);System.out.println("After invoke set,value is :"+name.get());}};// Not invoke set, print the value is nullSystem.out.println(name.get());// Invoke set to fill a valuename.set(“Thread Main”);// Start thread Aa.start();a.join();// Print the value after changed the value by thread ASystem.out.println(name.get());// Start thread Bb.start();b.join();// Print the value after changed the value by thread BSystem.out.println(name.get())}}
--结束END--
本文标题: 快速了解Java中ThreadLocal类
本文链接: https://www.lsjlt.com/news/221125.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0