ThreadLocal: 每個線程只能修改本線程在ThreadLocal中的值,各個線程之間互不干擾。
/**
* ThreadLocal線程局部變量
*
* ThreadLocal是使用空間換時間,synchronized是使用時間換空間
* 比如在hibernate中session就存在與ThreadLocal中,避免synchronized的使用
*
* 運行下面的程序,理解ThreadLocal
*
* @author 馬士兵
*/
package yxxy.c_022;
import java.util.concurrent.TimeUnit;
public class ThreadLocal2 {
//volatile static Person p = new Person();
static ThreadLocal<Person> tl = new ThreadLocal<>();
public static void main(String[] args) {
new Thread(()->{
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(tl.get());// 輸出null
}).start();
new Thread(()->{
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
tl.set(new Person());
}).start();
}
static class Person {
String name = "zhangsan";
}
}