package concurrent;
/*
* @author: wjf
* @version: 2016年3月27日 下午2:44:46
*/
public class TestThreadLocal {
/*
* threadLocal 会为线程创建一个共享变量的本地副本,这样的话,可以在线程内部任意使用,而又不影响其他线程,这样一来就不会产生线程安全问题,
* 也不会严重影响性能,但是有一点:使用 threadLocal 肯定需要耗费更大的内存
*/
/*
* threadLocal 重写 initialValue 方法,就可以不用调用 set() 方法,否则如果不调用 set 方法的话,initialValue
* 方法默认返回 null
*/
ThreadLocal<Long> locall=new ThreadLocal<Long>(){
protected Long initialValue(){
return Thread.currentThread().getId();
}
};
ThreadLocal<String> locals=new ThreadLocal<String>(){
protected String initialValue(){
return Thread.currentThread().getName();
}
};
public void set(){
locall.set(Thread.currentThread().getId());
locals.set(Thread.currentThread().getName());
}
public void get(){
System.out.println(locall.get());
System.out.println(locals.get());
}
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
final TestThreadLocal test=new TestThreadLocal();
// test.set();
test.get();
Thread thread1=new Thread(){
public void run(){
test.set();
test.get();
}
};
thread1.start();
thread1.join();
test.get();
}
}
Java ThreadLocal 解析
最新推荐文章于 2024-01-22 09:20:33 发布