ThreadLocal类

ThreadLocal类

    • 什么是ThreadLocal
    • 为什么ThreadLocal是线程安全的呢?

什么是ThreadLocal

ThreadLocal可以简单的理解为他其实就是一个工具类,
用来存储线程局部变量的一个工具类,存储的变量是线程安全的,其他线程无法访问到的;

用例:

  private static final ThreadLocal threadLocal = new ThreadLocal<>();
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(1);
        executorService.submit(() -> {
            threadLocal.set("test");
            getString();
        });
        System.out.println(threadLocal.get());
    }
    private static void getString(){
        System.out.println(threadLocal.get());
    }

null
test

ThreadLocal存储的变量只在当前线程下可以获取到,其他线程是获取不到的,存储的变量是线程安全的

为什么ThreadLocal是线程安全的呢?

ThreadLocal就是相当于桥梁工具类,他本身并不存储值,它是依赖Thread类中的ThreadLocalMap来实现存储的当调用set(T value)时,ThreadLocal将自身作为Key,值作为Value存储到Thread类中的ThreadLocalMap中这就相当于所有线程读写的都是自身Thred的一个私有副本,所以线程之间的数据是隔离的,因此是线程安全的。

你可能感兴趣的:(java,jvm,开发语言)