Java中的ThreadLocal类允许我们创建只能被同一个线程读写的变量。
因此,如果一段代码含有一个ThreadLocal变量的引用,即使两个线程同时执行这段代码,它们也无法访问到对方的ThreadLocal变量
- public class Session{
- private static ThreadLocal<Session> thread_local=new ThreadLocal<Session>();
- private Session() {
- }
- public static Session getInstance() {
- if(thread_local.get()==null){
- thread_local.set(new Session());
- }
- return thread_local.get();
- }
- }
- public class Test {
- public static void main(String[] args) throws NoSuchMethodException,
- SecurityException, InstantiationException, IllegalAccessException,
- IllegalArgumentException, InvocationTargetException {
- final Session session1=Session.getInstance();
- Session session2=Session.getInstance();
- System.out.println(session1==session2);
- new Thread(){
- public void run() {
- Session session=Session.getInstance();
- System.out.println(session==session1);
- };
- }.start();
- }
true
false