文章目录
  1. 1. ThreadLocal是什么?
  • 用法简介
  • 完整的使用示例
  • 使用场景
  • 之前面试的时候,面试官问题threadlocal怎么用?当时就懵逼了,只是见过,却不知道如何使用。

    提到ThreadLocal,有些Android或者Java程序员可能有所陌生,可能会提出种种问题,它是做什么的,是不是和线程有关,怎么使用呢?等等问题,本文将总结一下我对ThreadLocal的理解和认识,希望让大家理解ThreadLocal更加透彻一些。

    ThreadLocal是什么?

    ThreadLocal是一个关于创建线程局部变量的类。

    通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。而使用ThreadLocal创建的变量只能被当前线程访问,其他线程则无法访问和修改。

    用法简介

    • 创建,支持泛型

      ThreadLocal<String> mStringThreadLocal = new ThreadLocal<>();

    • set方法

      mStringThreadLocal.set("droidyue.com");

    • get方法

      mStringThreadLocal.get();

    完整的使用示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    private void testThreadLocal() {
    Thread t = new Thread() {
    ThreadLocal<String> mStringThreadLocal = new ThreadLocal<>();
    @Override
    public void run() {
    super.run();
    mStringThreadLocal.set("droidyue.com");
    mStringThreadLocal.get();
    }
    };
    t.start();
    }

    使用场景

    • 实现单个线程单例以及单个线程上下文信息存储,比如交易id等
    • 实现线程安全,非线程安全的对象使用ThreadLocal之后就会变得线程安全,因为每个线程都会有一个对应的实例
    • 承载一些线程相关的数据,避免在方法中来回传递参数
    文章目录
    1. 1. ThreadLocal是什么?
  • 用法简介
  • 完整的使用示例
  • 使用场景