codecamp

鸿蒙OS ThreadLocal

ThreadLocal

java.lang.Object

|---java.lang.ThreadLocal<T&

public class ThreadLocal<T>
extends Object

此类提供线程局部变量。 这些变量不同于它们的正常对应变量,因为每个访问一个(通过它的 get 或 set 方法)的线程都有它自己的、独立初始化的变量副本。 ThreadLocal 实例通常是希望将状态与线程相关联的类中的私有静态字段(例如,用户 ID 或事务 ID)。

例如,下面的类生成每个线程本地的唯一标识符。 线程的 id 在第一次调用 ThreadId.get() 时被分配,并且在后续调用中保持不变。

 import java.util.concurrent.atomic.AtomicInteger;


 public class ThreadId {
     // Atomic integer containing the next thread ID to be assigned
     private static final AtomicInteger nextId = new AtomicInteger(0);


     // Thread local variable containing each thread's ID
     private static final ThreadLocal<Integer> threadId =
         new ThreadLocal<Integer>() {
             @Override protected Integer initialValue() {
                 return nextId.getAndIncrement();
         }
     };


     // Returns the current thread's unique ID, assigning it if necessary
     public static int get() {
         return threadId.get();
     }
 }

 

只要线程处于活动状态并且 ThreadLocal 实例可访问,每个线程都持有对其线程局部变量副本的隐式引用; 在线程消失后,它的所有线程本地实例副本都将受到垃圾回收(除非存在对这些副本的其他引用)。

构造函数摘要

构造函数 描述
ThreadLocal() 创建一个线程局部变量。

方法总结

修饰符和类型 方法 描述
T get() 返回此线程局部变量的当前线程副本中的值。
protected T initialValue() 返回此线程局部变量的当前线程的“初始值”。
void remove() 删除此线程局部变量的当前线程值。
void set(T value) 将此线程局部变量的当前线程副本设置为指定值。
static <S> ThreadLocal<S> withInitial(Supplier<? extends S> supplier) 创建一个线程局部变量。
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

构造函数详细信息

ThreadLocal

public ThreadLocal()

创建一个线程局部变量。

方法详情

initialValue

protected T initialValue()

返回此线程局部变量的当前线程的“初始值”。 该方法将在线程第一次使用 get() 方法访问变量时调用,除非该线程先前调用了 set(T) 方法,在这种情况下,不会为该线程调用 initialValue 方法。 通常,每个线程最多调用一次此方法,但在随后调用 remove() 和 get() 的情况下,它可能会再次调用。

此实现仅返回 null; 如果程序员希望线程局部变量具有除 null 以外的初始值,则必须将 ThreadLocal 子类化,并重写此方法。 通常,将使用匿名内部类。

返回:

此线程本地的初始值

withInitial

public static <S> ThreadLocal<S> withInitial(Supplier<? extends S> supplier)

创建一个线程局部变量。 变量的初始值是通过调用 Supplier 的 get 方法来确定的。

类型参数:

类型参数名称 类型参数描述
S 线程本地值的类型

参数:

参数名称 参数描述
supplier 用于确定初始值的供应商

返回:

一个新的线程局部变量

Throws:

Throw名称 Throw描述
NullPointerException 如果指定的供应商为null

get

public T get()

返回此线程局部变量的当前线程副本中的值。 如果变量没有当前线程的值,则首先将其初始化为调用 initialValue() 方法返回的值。

返回:

此线程本地的当前线程的值

set

public void set(T value)

将此线程局部变量的当前线程副本设置为指定值。 大多数子类不需要重写此方法,仅依赖于 initialValue() 方法来设置线程局部变量的值。

参数:

参数名称 参数描述
value 要存储在此线程本地的当前线程副本中的值。

remove

public void remove()

删除此线程局部变量的当前线程值。 如果这个线程局部变量随后被当前线程读取,它的值将通过调用它的 initialValue() 方法重新初始化,除非它的值是由当前线程在中间设置的。 这可能会导致在当前线程中多次调用 initialValue 方法。

鸿蒙OS ThreadGroup
鸿蒙OS Throwable
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

鸿蒙OS 开发

鸿蒙OS 术语

鸿蒙OS Java API参考

鸿蒙OS ohos.aafwk.ability

鸿蒙OS ohos.aafwk.abilityjet.activedata

鸿蒙OS ohos.aafwk.content

鸿蒙OS java.lang

鸿蒙OS java.Util

鸿蒙OS java.Util class

鸿蒙OS ohos.data.dataability

鸿蒙OS ohos.data.dataability class

鸿蒙OS ohos.agp.components

鸿蒙OS ohos.agp.components interface

鸿蒙OS ohos.agp.components class

鸿蒙OS ohos.global.configuration

鸿蒙OS java.io

鸿蒙OS ohos.data.resultset

鸿蒙OS ohos.data.resultset interface

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }