新聞中心
ThreadLocal

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的龍泉驛網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
java.lang.Object
|---java.lang.ThreadLocal
public class ThreadLocal
extends Object 此類提供線程局部變量。 這些變量不同于它們的正常對(duì)應(yīng)變量,因?yàn)槊總€(gè)訪問(wèn)一個(gè)(通過(guò)它的 get 或 set 方法)的線程都有它自己的、獨(dú)立初始化的變量副本。 ThreadLocal 實(shí)例通常是希望將狀態(tài)與線程相關(guān)聯(lián)的類中的私有靜態(tài)字段(例如,用戶 ID 或事務(wù) ID)。
例如,下面的類生成每個(gè)線程本地的唯一標(biāo)識(shí)符。 線程的 id 在第一次調(diào)用 ThreadId.get() 時(shí)被分配,并且在后續(xù)調(diào)用中保持不變。
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 threadId =
new ThreadLocal() {
@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();
}
}
只要線程處于活動(dòng)狀態(tài)并且 ThreadLocal 實(shí)例可訪問(wèn),每個(gè)線程都持有對(duì)其線程局部變量副本的隱式引用; 在線程消失后,它的所有線程本地實(shí)例副本都將受到垃圾回收(除非存在對(duì)這些副本的其他引用)。
構(gòu)造函數(shù)摘要
| 構(gòu)造函數(shù) | 描述 |
|---|---|
| ThreadLocal() | 創(chuàng)建一個(gè)線程局部變量。 |
方法總結(jié)
| 修飾符和類型 | 方法 | 描述 |
|---|---|---|
| T | get() | 返回此線程局部變量的當(dāng)前線程副本中的值。 |
| protected T | initialValue() | 返回此線程局部變量的當(dāng)前線程的“初始值”。 |
| void | remove() | 刪除此線程局部變量的當(dāng)前線程值。 |
| void | set(T value) | 將此線程局部變量的當(dāng)前線程副本設(shè)置為指定值。 |
| static | withInitial(Supplier extends S> supplier) | 創(chuàng)建一個(gè)線程局部變量。 |
| 從類 java.lang.Object 繼承的方法 |
|---|
| clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
構(gòu)造函數(shù)詳細(xì)信息
ThreadLocal
public ThreadLocal()
創(chuàng)建一個(gè)線程局部變量。
方法詳情
initialValue
protected T initialValue()
返回此線程局部變量的當(dāng)前線程的“初始值”。 該方法將在線程第一次使用 get() 方法訪問(wèn)變量時(shí)調(diào)用,除非該線程先前調(diào)用了 set(T) 方法,在這種情況下,不會(huì)為該線程調(diào)用 initialValue 方法。 通常,每個(gè)線程最多調(diào)用一次此方法,但在隨后調(diào)用 remove() 和 get() 的情況下,它可能會(huì)再次調(diào)用。
此實(shí)現(xiàn)僅返回 null; 如果程序員希望線程局部變量具有除 null 以外的初始值,則必須將 ThreadLocal 子類化,并重寫此方法。 通常,將使用匿名內(nèi)部類。
返回:
此線程本地的初始值
withInitial
public static ThreadLocal withInitial(Supplier extends S> supplier)
創(chuàng)建一個(gè)線程局部變量。 變量的初始值是通過(guò)調(diào)用 Supplier 的 get 方法來(lái)確定的。
類型參數(shù):
| 類型參數(shù)名稱 | 類型參數(shù)描述 |
|---|---|
| S | 線程本地值的類型 |
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| supplier | 用于確定初始值的供應(yīng)商 |
返回:
一個(gè)新的線程局部變量
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| NullPointerException | 如果指定的供應(yīng)商為null |
get
public T get()
返回此線程局部變量的當(dāng)前線程副本中的值。 如果變量沒(méi)有當(dāng)前線程的值,則首先將其初始化為調(diào)用 initialValue() 方法返回的值。
返回:
此線程本地的當(dāng)前線程的值
set
public void set(T value)
將此線程局部變量的當(dāng)前線程副本設(shè)置為指定值。 大多數(shù)子類不需要重寫此方法,僅依賴于 initialValue() 方法來(lái)設(shè)置線程局部變量的值。
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| value | 要存儲(chǔ)在此線程本地的當(dāng)前線程副本中的值。 |
remove
public void remove()
刪除此線程局部變量的當(dāng)前線程值。 如果這個(gè)線程局部變量隨后被當(dāng)前線程讀取,它的值將通過(guò)調(diào)用它的 initialValue() 方法重新初始化,除非它的值是由當(dāng)前線程在中間設(shè)置的。 這可能會(huì)導(dǎo)致在當(dāng)前線程中多次調(diào)用 initialValue 方法。
本文標(biāo)題:創(chuàng)新互聯(lián)鴻蒙OS教程:鴻蒙OSThreadLocal
瀏覽地址:http://www.5511xx.com/article/djsigpd.html


咨詢
建站咨詢
