ThreadLocal线程局部变量
ThreadLocal是使用空间换时间,synchronized是使用时间换空间
比如在hibernate中session就存在与ThreadLocal中,避免synchronized的使用
package com.mo;
public class Test6 {
//所有线程共享
static volatile Person p = new Person();
//每个线程独享
static ThreadLocal<Person> tl = new ThreadLocal<Person>();
public static void main(String[] args) {
/*new Thread() {
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
p.name = "lisi";
}
}.start();
new Thread() {
public void run() {
try {
Thread.sleep(2000);
System.out.println(p.name);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();*/
new Thread() {
public void run() {
tl.set(new Person());
System.out.println("第一个 线程" + tl.get());
}
}.start();
new Thread() {
public void run() {
//第二个线程无法取到第一个set进去的对象,是每个线程独享的
System.out.println("第二个 线程" + tl.get());
}
}.start();
}
}
class Person {
String name = "zhangsan";
}
运行结果
第一个 线程com.mo.Person@459189e1
第二个 线程null