Java高级技术第五章——高并发之ThreadLocal线程局部变量

前言

前言点击此处查看:
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.

猜你喜欢

转载自blog.csdn.net/wang7807564/article/details/80048488