ThreadLocal.withInitial 和 set 区别
时间: 2023-08-21 20:17:10 浏览: 223
threadlocal.rar
ThreadLocal 是 Java 中用于在多线程环境下实现线程局部变量的工具类。ThreadLocal 提供了两种设置初始值的方式:使用 withInitial() 方法和使用 set() 方法。
1. withInitial() 方法:
- withInitial() 方法是 ThreadLocal 类的静态方法,它接受一个 Supplier 函数式接口作为参数,用于提供初始值。
- withInitial() 方法在第一次调用 get() 方法获取 ThreadLocal 的值时,会调用 Supplier 提供的函数来生成初始值,并将初始值与当前线程关联。
- 举例:ThreadLocal<String> threadLocal = ThreadLocal.withInitial(() -> "Initial Value");
2. set() 方法:
- set() 方法是 ThreadLocal 实例的方法,用于设置当前线程的 ThreadLocal 值。
- set() 方法直接将指定的值与当前线程关联,无需延迟加载或通过函数生成初始值。
- 举例:ThreadLocal<String> threadLocal = new ThreadLocal<>(); threadLocal.set("Value");
区别:
- withInitial() 方法在第一次调用 get() 方法时会延迟加载并生成初始值,适用于需要延迟加载或根据某个逻辑来生成初始值的场景。
- set() 方法直接将指定的值与当前线程关联,适用于已经有确定初始值的场景。
需要注意的是,使用 ThreadLocal 时要确保每个线程使用独立的 ThreadLocal 实例,以免线程之间相互影响。另外,使用完 ThreadLocal 后应及时清理,避免内存泄漏。
阅读全文