1.JAVA多线程(十)Java多线程之ThreadLocal
1.1 ThreadLocal类
ThreadLocal类主要解决的就是让每个线程绑定自己的值,可以将ThreadLocal类形象的比喻成存放数据的盒子,盒子中可以存储每个线程的私有数据。
如果你创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的本地副本,这也是ThreadLocal变量名的由来。他们可以使用 get()和 set())方法来获取默认值或将其值更改为当前线程所存的副本的值,从而避免了线程安全问题。
每个线程往ThreadLocal中读写数据是线程隔离,互相之间不会影响的,由于不需要共享信息,自然就不存在竞争问题了,从而保证了某些情况下线程的安全,以及避免了某些情况需要考虑线程安全必须同步带来的性能损失!
1.2 ThreadLocal示例
package com.yuanxw.chapter10;
import java.util.Random;
/**
* ThreadLocal
* 线程局部变量
*/
public class ThreadLocalExample {
private static ThreadLocal<String> defaultThreadLocal = new ThreadLocal(){
@Override
protected Object initialValue() {
return "==initialValue==";
}
};
private static ThreadLocal<String> threadLocal = new ThreadLocal();
public static void main(String[] args) throws InterruptedException {
System.out.println("获得defaultThreadLocal默认值:"+defaultThreadLocal.get());