快速了解Java中ThreadLocal类-创新互联

最近看Android FrameWork层代码,看到了ThreadLocal这个类,有点儿陌生,就翻了各种相关博客一一拜读;自己随后又研究了一遍源码,发现自己的理解较之前阅读的博文有不同之处,所以决定自己写篇文章说说自己的理解,希望可以起到以下作用:
- 可以疏通研究结果,加深自己的理解;
- 可以起到抛砖引玉的作用,帮助感兴趣的同学疏通思路;
- 分享学习经历,同大家一起交流和学习。

创新互联是一家专业提供霞浦企业网站建设,专注与成都网站建设、做网站、成都h5网站建设、小程序制作等业务。10年已为霞浦众多企业、政府机构等服务。创新互联专业网站设计公司优惠进行中。

一、 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 A
		Thread 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 B
		Thread 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 null
		System.out.println(name.get());
		// Invoke set to fill a value
		name.set(“Thread Main”);
		// Start thread A
		a.start();
		a.join();
		// Print the value after changed the value by thread A
		System.out.println(name.get());
		// Start thread B
		b.start();
		b.join();
		// Print the value after changed the value by thread B
		System.out.println(name.get())
	}
}

分享文章:快速了解Java中ThreadLocal类-创新互联
分享网址:http://ybzwz.com/article/ccigod.html