前言
前言点击此处查看:
http://blog.csdn.net/wang7807564/article/details/79113195
ThreadLocal线程局部变量
ThreadLocal是线程局部变量,使用空间换时间,而synchronized是使用时间换空间。比如在hibernate中session就存在于ThreadLocal中,避免了synchronized的使用。
线程间共享变量值通常使用volatile,这样可以实现多个线程之间对于某个变量的可见性。
之所以说ThreadLocal是线程局部变量,意思是对于同一个TheadLocal变量,对于每个不同的线程来讲,其自身都是唯一的,自己写入数据,只能自己的线程读取,别的线程如果没有写入数据,读取出来的值就是null.例如:
static ThreadLocal<Object> tl = new ThreadLocal<>();
//实例化了一个名为tl的变量
写入代码:
new Thread(()->{
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
tl.set("t1");
System.out.println(tl.get());
}).start();
new Thread(()->{
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
tl.set("t2");
System.out.println(tl.get());
}).start();
}
输出结果分别是t2和t1.