0%

ThreadLocal用法心得

ThreadLocal

  • ThreadLocal类允许我们创建只能被同一个线程读写的变量,本质是一个Hash表,keyThread自身.
  • 主要方法: set() / get() / remove()

创建

// 不带初始值
ThreadLocal<String> str = new ThreadLocal<>();

// 带初始值
static ThreadLocal<String> str = new ThreadLocal<String>() {
    @Override
    protected String initialValue() {
        return "a";
    }
};

// java8便捷写法
ThreadLocal<String> str = ThreadLocal.withInitial(() -> "a");

使用

public static void main(String[] args) {
    new Thread(() -> {
//            str.set("aa");
        System.out.println(str.get()); // 初始化a
        str.remove(); // 用完主动释放,防止内存泄漏
    }).start();

    new Thread(() -> {
        str.set("bb");  //赋值
        System.out.println(str.get()); // 输出bb
        str.remove();   // 用完主动释放,防止内存泄漏
    }).start();
}