最近看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())}}
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756