鴻蒙OS Thread

2022-05-26 17:12 更新

Thread

java.lang.Object

|---java.lang.Thread

  1. public class Thread
  2. extends Object
  3. implements Runnable

線程是程序中的執(zhí)行線程。 Java 虛擬機(jī)允許應(yīng)用程序同時(shí)運(yùn)行多個(gè)執(zhí)行線程。

每個(gè)線程都有一個(gè)優(yōu)先級(jí)。具有較高優(yōu)先級(jí)的線程優(yōu)先于具有較低優(yōu)先級(jí)的線程執(zhí)行。每個(gè)線程可能會(huì)也可能不會(huì)被標(biāo)記為守護(hù)進(jìn)程。當(dāng)在某個(gè)線程中運(yùn)行的代碼創(chuàng)建一個(gè)新的 Thread 對(duì)象時(shí),新線程的優(yōu)先級(jí)最初設(shè)置為等于創(chuàng)建線程的優(yōu)先級(jí),并且當(dāng)且僅當(dāng)創(chuàng)建線程是守護(hù)進(jìn)程時(shí),它才是守護(hù)線程。

當(dāng) Java 虛擬機(jī)啟動(dòng)時(shí),通常有一個(gè)非守護(hù)線程(通常調(diào)用某個(gè)指定類的名為 main 的方法)。 Java 虛擬機(jī)繼續(xù)執(zhí)行線程,直到發(fā)生以下任一情況:

  • 已調(diào)用 Runtime 類的退出方法,并且安全管理器已允許進(jìn)行退出操作。
  • 所有不是守護(hù)線程的線程都已經(jīng)死亡,要么從調(diào)用 run 方法返回,要么拋出傳播到 run 方法之外的異常。

有兩種方法可以創(chuàng)建一個(gè)新的執(zhí)行線程。一種是將類聲明為 Thread 的子類。這個(gè)子類應(yīng)該重寫類 Thread 的 run 方法。然后可以分配和啟動(dòng)子類的實(shí)例。例如,計(jì)算大于規(guī)定值的素?cái)?shù)的線程可以寫成如下:

  1. class PrimeThread extends Thread {
  2. long minPrime;
  3. PrimeThread(long minPrime) {
  4. this.minPrime = minPrime;
  5. }
  6. public void run() {
  7. // compute primes larger than minPrime
  8. . . .
  9. }
  10. }

下面的代碼將創(chuàng)建一個(gè)線程并開始運(yùn)行:

  1. PrimeThread p = new PrimeThread(143);
  2. p.start();

創(chuàng)建線程的另一種方法是聲明一個(gè)實(shí)現(xiàn) Runnable 接口的類。 然后該類實(shí)現(xiàn) run 方法。 然后可以分配一個(gè)類的實(shí)例,在創(chuàng)建線程時(shí)作為參數(shù)傳遞,然后啟動(dòng)。 這種其他樣式的相同示例如下所示:

  1. class PrimeRun implements Runnable {
  2. long minPrime;
  3. PrimeRun(long minPrime) {
  4. this.minPrime = minPrime;
  5. }
  6. public void run() {
  7. // compute primes larger than minPrime
  8. . . .
  9. }
  10. }

下面的代碼將創(chuàng)建一個(gè)線程并開始運(yùn)行:

  1. PrimeRun p = new PrimeRun(143);
  2. new Thread(p).start();

每個(gè)線程都有一個(gè)用于識(shí)別目的的名稱。 多個(gè)線程可能具有相同的名稱。 如果在創(chuàng)建線程時(shí)未指定名稱,則會(huì)為其生成一個(gè)新名稱。

除非另有說明,否則將 null 參數(shù)傳遞給此類中的構(gòu)造函數(shù)或方法將導(dǎo)致拋出 NullPointerException。

嵌套類摘要

修飾符和類型 描述
static class Thread.State 線程狀態(tài)。
static interface Thread.UncaughtExceptionHandler 當(dāng)線程由于未捕獲的異常而突然終止時(shí)調(diào)用的處理程序接口。

字段摘要

修飾符和類型 字段 描述
static int MAX_PRIORITY 線程可以擁有的最大優(yōu)先級(jí)。
static int MIN_PRIORITY 線程可以擁有的最低優(yōu)先級(jí)。
static int NORM_PRIORITY 分配給線程的默認(rèn)優(yōu)先級(jí)。

構(gòu)造函數(shù)摘要

構(gòu)造函數(shù) 描述
Thread() 分配一個(gè)新的 Thread 對(duì)象。
Thread(Runnable target) 分配一個(gè)新的 Thread 對(duì)象。
Thread(Runnable target, String name) 分配一個(gè)新的 Thread 對(duì)象。
Thread(String name) 分配一個(gè)新的 Thread 對(duì)象。
Thread(ThreadGroup group, Runnable target) 分配一個(gè)新的 Thread 對(duì)象。
Thread(ThreadGroup group, Runnable target, String name) 分配一個(gè)新的 Thread 對(duì)象,使其以 target 作為其運(yùn)行對(duì)象,以指定的名稱作為其名稱,并屬于 group 所引用的線程組。
Thread(ThreadGroup group, Runnable target, String name, long stackSize) 分配一個(gè)新的 Thread 對(duì)象,使其以 target 作為其運(yùn)行對(duì)象,以指定的名稱作為其名稱,并屬于由 group 引用的線程組,并具有指定的堆棧大小。
Thread(ThreadGroup group, String name) 分配一個(gè)新的 Thread 對(duì)象。

方法總結(jié)

修飾符和類型 方法 描述
static int activeCount() 返回當(dāng)前線程的線程組及其子組中活動(dòng)線程數(shù)的估計(jì)值。
void checkAccess() 確定當(dāng)前運(yùn)行的線程是否有權(quán)修改該線程。
protected Object clone() 拋出 CloneNotSupportedException,因?yàn)?nbsp;Thread 不能被有意義地克隆。
int countStackFrames() 已棄用。 此調(diào)用的定義取決于已棄用的suspend()。 此外,此調(diào)用的結(jié)果從未明確定義。
static Thread currentThread() 返回對(duì)當(dāng)前正在執(zhí)行的線程對(duì)象的引用。
void destroy() 已棄用。 此方法最初設(shè)計(jì)用于在不進(jìn)行任何清理的情況下銷毀此線程。 它持有的任何監(jiān)視器都將保持鎖定狀態(tài)。 但是,該方法從未實(shí)施。 如果要實(shí)現(xiàn)的話,它會(huì)像suspend()那樣容易死鎖。 如果目標(biāo)線程在關(guān)鍵系統(tǒng)資源被銷毀時(shí)持有保護(hù)它的鎖,則沒有線程可以再次訪問該資源。 如果另一個(gè)線程曾經(jīng)試圖鎖定這個(gè)資源,就會(huì)導(dǎo)致死鎖。 這種死鎖通常表現(xiàn)為“凍結(jié)”進(jìn)程。
static void dumpStack() 將當(dāng)前線程的堆棧跟蹤打印到標(biāo)準(zhǔn)錯(cuò)誤流。
static int enumerate(Thread[] tarray) 將當(dāng)前線程的線程組及其子組中的每個(gè)活動(dòng)線程復(fù)制到指定的數(shù)組中。
static MapThread,StackTraceElement[] getAllStackTraces() 返回所有活動(dòng)線程的堆棧跟蹤映射。
ClassLoader getContextClassLoader() 返回此線程的上下文 ClassLoader。
static Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler() 返回當(dāng)線程由于未捕獲的異常而突然終止時(shí)調(diào)用的默認(rèn)處理程序。
long getId() 返回此線程的標(biāo)識(shí)符。
String getName() 返回此線程的名稱。
int getPriority() 返回此線程的優(yōu)先級(jí)。
StackTraceElement[] getStackTrace() 返回表示此線程的堆棧轉(zhuǎn)儲(chǔ)的堆棧跟蹤元素?cái)?shù)組。
Thread.State getState() 返回此線程的狀態(tài)。
ThreadGroup getThreadGroup() 返回該線程所屬的線程組。
Thread.UncaughtExceptionHandler getUncaughtExceptionHandler() 返回當(dāng)此線程由于未捕獲的異常而突然終止時(shí)調(diào)用的處理程序。
static boolean holdsLock(Object obj) 當(dāng)且僅當(dāng)當(dāng)前線程持有指定對(duì)象上的監(jiān)視器鎖時(shí)才返回 true。
void interrupt() 中斷這個(gè)線程。
static boolean interrupted() 測(cè)試當(dāng)前線程是否被中斷。
boolean isAlive() 測(cè)試此線程是否存在。
boolean isDaemon() 測(cè)試此線程是否為守護(hù)線程。
boolean isInterrupted() 測(cè)試此線程是否已被中斷。
void join() 等待這個(gè)線程死掉。
void join(long millis) 最多等待幾毫秒讓該線程終止。
void join(long millis, int nanos) 最多等待毫秒加上納秒以使該線程終止。
void resume() 已棄用。 此方法僅用于與suspend() 一起使用,該方法已被棄用,因?yàn)樗菀装l(fā)生死鎖。
void run() 如果該線程是使用單獨(dú)的 Runnable 運(yùn)行對(duì)象構(gòu)造的,則調(diào)用該 Runnable 對(duì)象的 run 方法; 否則,此方法不執(zhí)行任何操作并返回。
void setContextClassLoader(ClassLoader cl) 設(shè)置此線程的上下文 ClassLoader。
void setDaemon(boolean on) 將此線程標(biāo)記為守護(hù)線程或用戶線程。
static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh) 設(shè)置當(dāng)線程由于未捕獲的異常而突然終止時(shí)調(diào)用的默認(rèn)處理程序,并且沒有為該線程定義其他處理程序。
void setName(String name) 將此線程的名稱更改為等于參數(shù)名稱。
void setPriority(int newPriority) 更改此線程的優(yōu)先級(jí)。
void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh) 設(shè)置當(dāng)此線程由于未捕獲的異常而突然終止時(shí)調(diào)用的處理程序。
static void sleep(long millis) 使當(dāng)前執(zhí)行的線程在指定的毫秒數(shù)內(nèi)休眠(暫時(shí)停止執(zhí)行),具體取決于系統(tǒng)計(jì)時(shí)器和調(diào)度程序的精度和準(zhǔn)確性。
static void sleep(long millis, int nanos) 使當(dāng)前執(zhí)行的線程休眠(暫時(shí)停止執(zhí)行)指定的毫秒數(shù)加上指定的納秒數(shù),具體取決于系統(tǒng)計(jì)時(shí)器和調(diào)度程序的精度和準(zhǔn)確性。
void start() 使該線程開始執(zhí)行; Java 虛擬機(jī)調(diào)用該線程的 run 方法。
void stop() 已棄用。 這種方法本質(zhì)上是不安全的。 使用 Thread.stop 停止線程會(huì)導(dǎo)致它解鎖所有已鎖定的監(jiān)視器(這是未經(jīng)檢查的 ThreadDeath 異常沿堆棧傳播的自然結(jié)果)。 如果以前受這些監(jiān)視器保護(hù)的任何對(duì)象處于不一致狀態(tài),則損壞的對(duì)象將對(duì)其他線程可見,從而可能導(dǎo)致任意行為。 停止的許多用法應(yīng)該由簡(jiǎn)單地修改一些變量以指示目標(biāo)線程應(yīng)該停止運(yùn)行的代碼替換。 目標(biāo)線程應(yīng)該定期檢查這個(gè)變量,如果變量指示它要停止運(yùn)行,則以有序的方式從它的run方法返回。 如果目標(biāo)線程等待很長(zhǎng)時(shí)間(例如在條件變量上),則應(yīng)使用中斷方法來中斷等待。
void stop(Throwable obj) 已棄用。 此方法最初旨在強(qiáng)制線程停止并將給定的 Throwable 作為異常拋出。 它本質(zhì)上是不安全的(有關(guān)詳細(xì)信息,請(qǐng)參閱 stop()),此外,它還可用于生成目標(biāo)線程未準(zhǔn)備好處理的異常。
void suspend() 已棄用。 此方法已被棄用,因?yàn)樗举|(zhì)上容易死鎖。 如果目標(biāo)線程在暫停時(shí)對(duì)保護(hù)關(guān)鍵系統(tǒng)資源的監(jiān)視器持有鎖,則在目標(biāo)線程恢復(fù)之前沒有線程可以訪問該資源。 如果將恢復(fù)目標(biāo)線程的線程在調(diào)用 resume 之前嘗試鎖定此監(jiān)視器,則會(huì)導(dǎo)致死鎖。 這種死鎖通常表現(xiàn)為“凍結(jié)”進(jìn)程。
String toString() 返回此線程的字符串表示形式,包括線程的名稱、優(yōu)先級(jí)和線程組。
static void yield() 向調(diào)度程序提示當(dāng)前線程愿意放棄其當(dāng)前對(duì)處理器的使用。
從類 java.lang.Object 繼承的方法
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

字段詳細(xì)信息

MAX_PRIORITY

public static final int MAX_PRIORITY

線程可以擁有的最大優(yōu)先級(jí)。

MIN_PRIORITY

public static final int MIN_PRIORITY

線程可以擁有的最低優(yōu)先級(jí)。

NORM_PRIORITY

public static final int NORM_PRIORITY

分配給線程的默認(rèn)優(yōu)先級(jí)。

構(gòu)造函數(shù)詳細(xì)信息

Thread

public Thread()

分配一個(gè)新的 Thread 對(duì)象。 此構(gòu)造函數(shù)與 Thread (null, null, gname) 的效果相同,其中 gname 是新生成的名稱。 自動(dòng)生成的名稱格式為“Thread-”+n,其中 n 是整數(shù)。

Thread

public Thread(Runnable target)

分配一個(gè)新的 Thread 對(duì)象。 此構(gòu)造函數(shù)與 Thread (null, target, gname) 的效果相同,其中 gname 是新生成的名稱。 自動(dòng)生成的名稱格式為“Thread-”+n,其中 n 是整數(shù)。

參數(shù):

參數(shù)名稱 參數(shù)描述
target 此線程啟動(dòng)時(shí)調(diào)用其 run 方法的對(duì)象。 如果為 null,則此類 run 方法不執(zhí)行任何操作。

Thread

public Thread(ThreadGroup group, Runnable target)

分配一個(gè)新的 Thread 對(duì)象。 此構(gòu)造函數(shù)與 Thread (group, target, gname) 具有相同的效果,其中 gname 是新生成的名稱。 自動(dòng)生成的名稱格式為“Thread-”+n,其中 n 是整數(shù)。

參數(shù):

參數(shù)名稱 參數(shù)描述
group 線程組。 如果為 null 并且存在安全管理器,則該組由 SecurityManager#getThreadGroup 確定。 如果沒有安全管理器或 SecurityManager.getThreadGroup() 返回 null,則將該組設(shè)置為當(dāng)前線程的線程組。
target 此線程啟動(dòng)時(shí)調(diào)用其 run 方法的對(duì)象。 如果為 null,則調(diào)用此線程的 run 方法。

Throws:

Throw名稱 Throw描述
SecurityException 如果當(dāng)前線程無法在指定線程組中創(chuàng)建線程

Thread

public Thread(String name)

分配一個(gè)新的 Thread 對(duì)象。 此構(gòu)造函數(shù)與 Thread (null, null, name) 具有相同的效果。

參數(shù):

參數(shù)名稱 參數(shù)描述
name 新線程的名稱

Thread

public Thread(ThreadGroup group, String name)

分配一個(gè)新的 Thread 對(duì)象。 此構(gòu)造函數(shù)與 Thread (group, null, name) 具有相同的效果。

參數(shù):

參數(shù)名稱 參數(shù)描述
group 線程組。 如果為 null 并且存在安全管理器,則該組由 SecurityManager#getThreadGroup 確定。 如果沒有安全管理器或 SecurityManager.getThreadGroup() 返回 null,則將該組設(shè)置為當(dāng)前線程的線程組。
name 新線程的名稱

Throws:

Throw名稱 Throw描述
SecurityException 如果當(dāng)前線程無法在指定線程組中創(chuàng)建線程

Thread

public Thread(Runnable target, String name)

分配一個(gè)新的 Thread 對(duì)象。 此構(gòu)造函數(shù)與 Thread (null, target, name) 具有相同的效果。

參數(shù):

參數(shù)名稱 參數(shù)描述
target 此線程啟動(dòng)時(shí)調(diào)用其 run 方法的對(duì)象。 如果為 null,則調(diào)用此線程的 run 方法。
name 新線程的名稱

Thread

public Thread(ThreadGroup group, Runnable target, String name)

分配一個(gè)新的 Thread 對(duì)象,使其以 target 作為其運(yùn)行對(duì)象,以指定的名稱作為其名稱,并屬于 group 所引用的線程組。

如果有安全管理器,則使用 ThreadGroup 作為其參數(shù)調(diào)用其 SecurityManager#checkAccess(ThreadGroup) 方法。

此外,當(dāng)覆蓋 getContextClassLoader 或 setContextClassLoader 方法的子類的構(gòu)造函數(shù)直接或間接調(diào)用時(shí),它的 checkPermission 方法使用 RuntimePermission("enableContextClassLoaderOverride") 權(quán)限調(diào)用。

新創(chuàng)建線程的優(yōu)先級(jí)設(shè)置為等于創(chuàng)建它的線程的優(yōu)先級(jí),即當(dāng)前運(yùn)行的線程。方法 setPriority 可用于將優(yōu)先級(jí)更改為新值。

當(dāng)且僅當(dāng)創(chuàng)建它的線程當(dāng)前被標(biāo)記為守護(hù)線程時(shí),新創(chuàng)建的線程最初被標(biāo)記為守護(hù)線程。方法 setDaemon 可用于更改線程是否為守護(hù)進(jìn)程。

參數(shù):

參數(shù)名稱 參數(shù)描述
group 線程組。 如果為 null 并且存在安全管理器,則該組由 SecurityManager#getThreadGroup 確定。 如果沒有安全管理器或 SecurityManager.getThreadGroup() 返回 null,則將該組設(shè)置為當(dāng)前線程的線程組。
target 此線程啟動(dòng)時(shí)調(diào)用其 run 方法的對(duì)象。 如果為 null,則調(diào)用此線程的 run 方法。
name 新線程的名稱

Throws:

Throw名稱 Throw描述
SecurityException 如果當(dāng)前線程無法在指定線程組中創(chuàng)建線程或無法覆蓋上下文類加載器方法。

Thread

public Thread(ThreadGroup group, Runnable target, String name, long stackSize)

分配一個(gè)新的 Thread 對(duì)象,使其以 target 作為其運(yùn)行對(duì)象,以指定的名稱作為其名稱,并屬于由 group 引用的線程組,并具有指定的堆棧大小。

此構(gòu)造函數(shù)與 Thread(java.lang.ThreadGroup,java.lang.Runnable,java.lang.String) 相同,只是它允許指定線程堆棧大小。堆棧大小是虛擬機(jī)要為此線程堆棧分配的地址空間的近似字節(jié)數(shù)。 stackSize 參數(shù)的影響(如果有)高度依賴于平臺(tái)。

在某些平臺(tái)上,為 stackSize 參數(shù)指定更高的值可能允許線程在拋出 StackOverflowError 之前實(shí)現(xiàn)更大的遞歸深度。類似地,指定較低的值可能允許更多線程同時(shí)存在,而不會(huì)引發(fā) OutOfMemoryError(或其他內(nèi)部錯(cuò)誤)。 stackSize 參數(shù)的值與最大遞歸深度和并發(fā)級(jí)別之間的關(guān)系細(xì)節(jié)取決于平臺(tái)。在某些平臺(tái)上,stackSize 參數(shù)的值可能沒有任何影響。

虛擬機(jī)可以自由地將 stackSize 參數(shù)視為建議。如果平臺(tái)的指定值過低,虛擬機(jī)可能會(huì)使用一些特定于平臺(tái)的最小值;如果指定的值過高,則虛擬機(jī)可能會(huì)改為使用某些特定于平臺(tái)的最大值。同樣,虛擬機(jī)可以隨意向上或向下舍入指定的值(或完全忽略它)。

為 stackSize 參數(shù)指定零值將導(dǎo)致此構(gòu)造函數(shù)的行為與 Thread(ThreadGroup, Runnable, String) 構(gòu)造函數(shù)完全相同。

由于此構(gòu)造函數(shù)的行為依賴于平臺(tái),因此在使用時(shí)應(yīng)格外小心。執(zhí)行給定計(jì)算所需的線程堆棧大小可能會(huì)因 JRE 實(shí)現(xiàn)而異。鑒于這種變化,可能需要仔細(xì)調(diào)整堆棧大小參數(shù),并且可能需要針對(duì)運(yùn)行應(yīng)用程序的每個(gè) JRE 實(shí)現(xiàn)重復(fù)調(diào)整。

實(shí)現(xiàn)說明:鼓勵(lì) Java 平臺(tái)實(shí)現(xiàn)者記錄其實(shí)現(xiàn)與 stackSize 參數(shù)相關(guān)的行為。

參數(shù):

參數(shù)名稱 參數(shù)描述
group 線程組。 如果為 null 并且存在安全管理器,則該組由 SecurityManager#getThreadGroup 確定。 如果沒有安全管理器或 SecurityManager.getThreadGroup() 返回 null,則將該組設(shè)置為當(dāng)前線程的線程組。
target 此線程啟動(dòng)時(shí)調(diào)用其 run 方法的對(duì)象。 如果為 null,則調(diào)用此線程的 run 方法。
name 新線程的名稱
stackSize 新線程所需的堆棧大小,或?yàn)榱惚硎疽雎源藚?shù)。

Throws:

Throw名稱 Throw描述
SecurityException 如果當(dāng)前線程無法在指定線程組中創(chuàng)建線程

方法詳情

currentThread

public static Thread currentThread()

返回對(duì)當(dāng)前正在執(zhí)行的線程對(duì)象的引用。

返回:

當(dāng)前正在執(zhí)行的線程。

yield

public static void yield()

向調(diào)度程序提示當(dāng)前線程愿意放棄其當(dāng)前對(duì)處理器的使用。 調(diào)度程序可以隨意忽略此提示。

Yield 是一種啟發(fā)式嘗試,旨在改善線程之間的相對(duì)進(jìn)展,否則會(huì)過度使用 CPU。 它的使用應(yīng)與詳細(xì)的分析和基準(zhǔn)測(cè)試相結(jié)合,以確保它實(shí)際上具有預(yù)期的效果。

很少使用這種方法。 它對(duì)于調(diào)試或測(cè)試目的可能很有用,它可能有助于重現(xiàn)由于競(jìng)爭(zhēng)條件導(dǎo)致的錯(cuò)誤。 在設(shè)計(jì)并發(fā)控制結(jié)構(gòu)(例如 java.util.concurrent.locks 包中的結(jié)構(gòu))時(shí),它也可能很有用。

sleep

public static void sleep(long millis) throws InterruptedException

使當(dāng)前執(zhí)行的線程休眠(暫時(shí)停止執(zhí)行)指定的毫秒數(shù),取決于系統(tǒng)計(jì)時(shí)器和調(diào)度程序的精度和準(zhǔn)確性。 該線程不會(huì)失去任何監(jiān)視器的所有權(quán)。

參數(shù):

參數(shù)名稱 參數(shù)描述
millis 以毫秒為單位的睡眠時(shí)間長(zhǎng)度

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果毫秒的值為負(fù)
InterruptedException 如果任何線程中斷了當(dāng)前線程。 拋出此異常時(shí)清除當(dāng)前線程的中斷狀態(tài)。

sleep

public static void sleep(long millis, int nanos) throws InterruptedException

使當(dāng)前執(zhí)行的線程休眠(暫時(shí)停止執(zhí)行)指定的毫秒數(shù)加上指定的納秒數(shù),具體取決于系統(tǒng)計(jì)時(shí)器和調(diào)度程序的精度和準(zhǔn)確性。 該線程不會(huì)失去任何監(jiān)視器的所有權(quán)。

參數(shù):

參數(shù)名稱 參數(shù)描述
millis 以毫秒為單位的睡眠時(shí)間長(zhǎng)度
nanos 0-999999 額外的納秒睡眠

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果 millis 的值為負(fù),或者 nanos 的值不在 0-999999 范圍內(nèi)
InterruptedException 如果任何線程中斷了當(dāng)前線程。 拋出此異常時(shí)清除當(dāng)前線程的中斷狀態(tài)。

clone

protected Object clone() throws CloneNotSupportedException

拋出 CloneNotSupportedException,因?yàn)?Thread 不能被有意義地克隆。 而是構(gòu)建一個(gè)新線程。

覆蓋:

在類 Object 中克隆

返回:

此實(shí)例的克隆。

Throws:

Throw名稱 Throw描述
CloneNotSupportedException 總是

start

public void start()

使該線程開始執(zhí)行; Java 虛擬機(jī)調(diào)用該線程的 run 方法。

結(jié)果是兩個(gè)線程同時(shí)運(yùn)行:當(dāng)前線程(從對(duì) start 方法的調(diào)用返回)和另一個(gè)線程(執(zhí)行其 run 方法)。

多次啟動(dòng)一個(gè)線程是不合法的。 特別是,線程一旦完成執(zhí)行就可能不會(huì)重新啟動(dòng)。

拋出:

Throw名稱 Throw描述
IllegalThreadStateException 如果線程已經(jīng)啟動(dòng)。

run

public void run()

如果該線程是使用單獨(dú)的 Runnable 運(yùn)行對(duì)象構(gòu)造的,則調(diào)用該 Runnable 對(duì)象的 run 方法; 否則,此方法不執(zhí)行任何操作并返回。

Thread 的子類應(yīng)覆蓋此方法。

指定者:

在接口 Runnable 中運(yùn)行

stop

@Deprecated public final void stop()

已棄用。這種方法本質(zhì)上是不安全的。使用 Thread.stop 停止線程會(huì)導(dǎo)致它解鎖所有已鎖定的監(jiān)視器(這是未經(jīng)檢查的 ThreadDeath 異常沿堆棧傳播的自然結(jié)果)。如果以前受這些監(jiān)視器保護(hù)的任何對(duì)象處于不一致狀態(tài),則損壞的對(duì)象將對(duì)其他線程可見,從而可能導(dǎo)致任意行為。停止的許多用法應(yīng)該由簡(jiǎn)單地修改一些變量以指示目標(biāo)線程應(yīng)該停止運(yùn)行的代碼替換。目標(biāo)線程應(yīng)該定期檢查這個(gè)變量,如果變量指示它要停止運(yùn)行,則以有序的方式從它的run方法返回。如果目標(biāo)線程等待很長(zhǎng)時(shí)間(例如在條件變量上),則應(yīng)使用中斷方法來中斷等待。

強(qiáng)制線程停止執(zhí)行。

如果安裝了安全管理器,則調(diào)用其 checkAccess 方法,并將 this 作為其參數(shù)。這可能會(huì)導(dǎo)致引發(fā) SecurityException(在當(dāng)前線程中)。

如果此線程與當(dāng)前線程不同(即當(dāng)前線程試圖停止除自身之外的線程),則另外調(diào)用安全管理器的 checkPermission 方法(帶有 RuntimePermission("stopThread") 參數(shù))。同樣,這可能會(huì)導(dǎo)致拋出 SecurityException(在當(dāng)前線程中)。

這個(gè)線程所代表的線程被強(qiáng)制停止它正在做的任何異常,并拋出一個(gè)新創(chuàng)建的 ThreadDeath 對(duì)象作為異常。

允許停止尚未啟動(dòng)的線程。如果線程最終啟動(dòng),它會(huì)立即終止。

應(yīng)用程序通常不應(yīng)該嘗試捕獲 ThreadDeath,除非它必須執(zhí)行一些特別的清理操作(請(qǐng)注意,拋出 ThreadDeath 會(huì)導(dǎo)致 try 語句的 finally 子句在線程正式終止之前執(zhí)行)。如果一個(gè) catch 子句捕獲了一個(gè) ThreadDeath 對(duì)象,那么重新拋出該對(duì)象以使線程真正終止是很重要的。

如果未捕獲的異常是 ThreadDeath 的實(shí)例,則對(duì)其他未捕獲的異常做出反應(yīng)的頂級(jí)錯(cuò)誤處理程序不會(huì)打印出消息或以其他方式通知應(yīng)用程序。

Throws:

Throw名稱 Throw描述
SecurityException 如果當(dāng)前線程不能修改這個(gè)線程。

stop

@Deprecated public final void stop(Throwable obj)

已棄用。 此方法最初旨在強(qiáng)制線程停止并將給定的 Throwable 作為異常拋出。 它本質(zhì)上是不安全的(有關(guān)詳細(xì)信息,請(qǐng)參閱 stop()),此外,它還可用于生成目標(biāo)線程未準(zhǔn)備好處理的異常。

引發(fā) UnsupportedOperationException。

參數(shù):

參數(shù)名稱 參數(shù)描述
obj 忽略

interrupt

public void interrupt()

中斷這個(gè)線程。

除非當(dāng)前線程正在中斷自己,這總是允許的,否則會(huì)調(diào)用該線程的 checkAccess 方法,這可能會(huì)導(dǎo)致拋出 SecurityException。

如果此線程在調(diào)用 Object 類的 Object#wait()、Object#wait(long) 或 Object#wait(long, int) 方法或 join()、join(long) 方法時(shí)被阻塞, join(long,int)、sleep(long) 或 sleep(long,int) 方法,則其中斷狀態(tài)將被清除并收到 InterruptedException。

如果該線程在 InterruptibleChannel 上的 I/O 操作中被阻塞,則通道將關(guān)閉,線程的中斷狀態(tài)將被設(shè)置,線程將收到 ClosedByInterruptException。

如果該線程在 Selector 中被阻塞,則線程的中斷狀態(tài)將被設(shè)置,并且它將立即從選擇操作返回,可能帶有非零值,就像調(diào)用了選擇器的喚醒方法一樣。

如果前面的條件都不成立,則將設(shè)置該線程的中斷狀態(tài)。

中斷一個(gè)不活動(dòng)的線程不需要有任何效果。

Throws:

Throw名稱 Throw描述
SecurityException 如果當(dāng)前線程不能修改這個(gè)線程

interrupted

public static boolean interrupted()

測(cè)試當(dāng)前線程是否被中斷。 通過該方法清除線程的中斷狀態(tài)。 換句話說,如果這個(gè)方法被連續(xù)調(diào)用兩次,第二次調(diào)用將返回 false(除非當(dāng)前線程再次被中斷,在第一次調(diào)用清除其中斷狀態(tài)之后,第二次調(diào)用檢查它之前)。

由于在中斷時(shí)線程不活動(dòng)而被忽略的線程中斷將通過此方法返回 false 來反映。

返回:

如果當(dāng)前線程已被中斷,則為 true; 否則為false。

isInterrupted

public boolean isInterrupted()

測(cè)試此線程是否已被中斷。 線程的中斷狀態(tài)不受此方法的影響。

由于在中斷時(shí)線程不活動(dòng)而被忽略的線程中斷將通過此方法返回 false 來反映。

返回:

如果此線程已被中斷,則為 true; 否則為 false。

destroy

@Deprecated public void destroy()

已棄用。 此方法最初設(shè)計(jì)用于在不進(jìn)行任何清理的情況下銷毀此線程。 它持有的任何監(jiān)視器都將保持鎖定狀態(tài)。 但是,該方法從未實(shí)施。 如果要實(shí)現(xiàn)的話,它會(huì)像suspend()那樣容易死鎖。 如果目標(biāo)線程在關(guān)鍵系統(tǒng)資源被銷毀時(shí)持有保護(hù)它的鎖,則沒有線程可以再次訪問該資源。 如果另一個(gè)線程曾經(jīng)試圖鎖定這個(gè)資源,就會(huì)導(dǎo)致死鎖。 這種死鎖通常表現(xiàn)為“凍結(jié)”進(jìn)程。

引發(fā) NoSuchMethodError。

Throws:

Throw名稱 Throw描述
NoSuchMethodError 總是

isAlive

public final boolean isAlive()

測(cè)試此線程是否存在。 如果線程已啟動(dòng)且尚未死亡,則該線程處于活動(dòng)狀態(tài)。

返回:

如果該線程還活著,則為 true; 否則為false。

suspend

@Deprecated public final void suspend()

已棄用。 此方法已被棄用,因?yàn)樗举|(zhì)上容易死鎖。 如果目標(biāo)線程在暫停時(shí)對(duì)保護(hù)關(guān)鍵系統(tǒng)資源的監(jiān)視器持有鎖,則在目標(biāo)線程恢復(fù)之前沒有線程可以訪問該資源。 如果將恢復(fù)目標(biāo)線程的線程在調(diào)用 resume 之前嘗試鎖定此監(jiān)視器,則會(huì)導(dǎo)致死鎖。 這種死鎖通常表現(xiàn)為“凍結(jié)”進(jìn)程。

暫停此線程。

首先,調(diào)用該線程的 checkAccess 方法時(shí)不帶任何參數(shù)。 這可能會(huì)導(dǎo)致拋出 SecurityException(在當(dāng)前線程中)。

如果線程是活動(dòng)的,它會(huì)被掛起并且不會(huì)繼續(xù)前進(jìn),除非它被恢復(fù)。

Throws:

Throw名稱 Throw描述
SecurityException 如果當(dāng)前線程不能修改這個(gè)線程。

resume

@Deprecated public final void resume()

已棄用。 此方法僅用于與suspend() 一起使用,該方法已被棄用,因?yàn)樗菀装l(fā)生死鎖。

恢復(fù)掛起的線程。

首先,調(diào)用該線程的 checkAccess 方法時(shí)不帶任何參數(shù)。 這可能會(huì)導(dǎo)致拋出 SecurityException(在當(dāng)前線程中)。

如果線程處于活動(dòng)狀態(tài)但被掛起,它會(huì)被恢復(fù)并被允許在其執(zhí)行中取得進(jìn)展。

Throws:

Throw名稱 Throw描述
SecurityException 如果當(dāng)前線程不能修改這個(gè)線程。

setPriority

public final void setPriority(int newPriority)

更改此線程的優(yōu)先級(jí)。

首先調(diào)用該線程的 checkAccess 方法,不帶任何參數(shù)。 這可能會(huì)導(dǎo)致拋出 SecurityException。

否則,此線程的優(yōu)先級(jí)設(shè)置為指定的 newPriority 和線程的線程組的最大允許優(yōu)先級(jí)中的較小者。

參數(shù):

參數(shù)名稱 參數(shù)描述
newPriority 將此線程設(shè)置為的優(yōu)先級(jí)

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果優(yōu)先級(jí)不在 MIN_PRIORITY 到 MAX_PRIORITY 范圍內(nèi)。
SecurityException 如果當(dāng)前線程不能修改這個(gè)線程。

getPriority

public final int getPriority()

返回此線程的優(yōu)先級(jí)。

返回:

這個(gè)線程的優(yōu)先級(jí)。

setName

public final void setName(String name)

將此線程的名稱更改為等于參數(shù)名稱。

首先調(diào)用該線程的 checkAccess 方法,不帶任何參數(shù)。 這可能會(huì)導(dǎo)致拋出 SecurityException。

參數(shù):

參數(shù)名稱 參數(shù)描述
name 此線程的新名稱。

Throws:

Throw名稱 Throw描述
SecurityException 如果當(dāng)前線程不能修改這個(gè)線程。

getName

public final String getName()

返回此線程的名稱。

返回:

此線程的名稱。

getThreadGroup

public final ThreadGroup getThreadGroup()

返回該線程所屬的線程組。 如果此線程已終止(已停止),則此方法返回 null。

返回:

此線程的線程組。

activeCount

public static int activeCount()

返回當(dāng)前線程的線程組及其子組中活動(dòng)線程數(shù)的估計(jì)值。 遞歸迭代當(dāng)前線程的線程組中的所有子組。

返回的值只是一個(gè)估計(jì)值,因?yàn)樵诖朔椒ū闅v內(nèi)部數(shù)據(jù)結(jié)構(gòu)時(shí)線程數(shù)可能會(huì)動(dòng)態(tài)變化,并且可能會(huì)受到某些系統(tǒng)線程的存在的影響。 此方法主要用于調(diào)試和監(jiān)視目的。

返回:

當(dāng)前線程的線程組和以當(dāng)前線程的線程組為祖先的任何其他線程組中的活動(dòng)線程數(shù)的估計(jì)

enumerate

public static int enumerate(Thread[] tarray)

將當(dāng)前線程的線程組及其子組中的每個(gè)活動(dòng)線程復(fù)制到指定的數(shù)組中。 該方法只是調(diào)用當(dāng)前線程的線程組的 [ThreadGroup.enumerate(Thread]) 方法。

應(yīng)用程序可能會(huì)使用 activeCount 方法來估計(jì)數(shù)組應(yīng)該有多大,但是如果數(shù)組太短而無法容納所有線程,那么額外的線程將被忽略。 如果獲取當(dāng)前線程的線程組及其子組中的每個(gè)活動(dòng)線程至關(guān)重要,則調(diào)用程序應(yīng)驗(yàn)證返回的 int 值是否嚴(yán)格小于 tarray 的長(zhǎng)度。

由于此方法中固有的競(jìng)爭(zhēng)條件,建議僅將該方法用于調(diào)試和監(jiān)視目的。

參數(shù):

參數(shù)名稱 參數(shù)描述
tarray 將線程列表放入其中的數(shù)組

返回:

放入數(shù)組的線程數(shù)

Throws:

Throw名稱 Throw描述
SecurityException if ThreadGroup.checkAccess() 判斷當(dāng)前線程無法訪問其線程組

countStackFrames

@Deprecated public int countStackFrames()

已棄用。 此調(diào)用的定義取決于已棄用的suspend()。 此外,此調(diào)用的結(jié)果從未明確定義。

計(jì)算此線程中的堆棧幀數(shù)。 線程必須暫停。

返回:

此線程中的堆棧幀數(shù)。

Throws:

Throw名稱 Throw描述
IllegalThreadStateException 如果這個(gè)線程沒有被掛起。

join

public final void join(long millis) throws InterruptedException

最多等待幾毫秒讓該線程終止。 超時(shí) 0 意味著永遠(yuǎn)等待。

此實(shí)現(xiàn)使用以 this.isAlive 為條件的 this.wait 調(diào)用循環(huán)。 當(dāng)線程終止時(shí),將調(diào)用 this.notifyAll 方法。 建議應(yīng)用程序不要在 Thread 實(shí)例上使用 wait、notify 或 notifyAll。

參數(shù):

參數(shù)名稱 參數(shù)描述
millis 以毫秒為單位的等待時(shí)間

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果毫秒的值為負(fù)
InterruptedException 如果任何線程中斷了當(dāng)前線程。 拋出此異常時(shí)清除當(dāng)前線程的中斷狀態(tài)。

join

public final void join(long millis, int nanos) throws InterruptedException

最多等待毫秒毫秒加上納秒納秒以使該線程終止。

此實(shí)現(xiàn)使用以 this.isAlive 為條件的 this.wait 調(diào)用循環(huán)。 當(dāng)線程終止時(shí),將調(diào)用 this.notifyAll 方法。 建議應(yīng)用程序不要在 Thread 實(shí)例上使用 wait、notify 或 notifyAll。

參數(shù):

參數(shù)名稱 參數(shù)描述
millis 以毫秒為單位的等待時(shí)間
nanos 0-999999 額外的納秒等待

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果 millis 的值為負(fù),或者 nanos 的值不在 0-999999 范圍內(nèi)
InterruptedException 如果任何線程中斷了當(dāng)前線程。 拋出此異常時(shí)清除當(dāng)前線程的中斷狀態(tài)。

join

public final void join() throws InterruptedException

等待這個(gè)線程死掉。

此方法的調(diào)用與調(diào)用的行為方式完全相同

join(0)

Throws:

Throw名稱 Throw描述
InterruptedException 如果任何線程中斷了當(dāng)前線程。 拋出此異常時(shí)清除當(dāng)前線程的中斷狀態(tài)。

dumpStack

public static void dumpStack()

將當(dāng)前線程的堆棧跟蹤打印到標(biāo)準(zhǔn)錯(cuò)誤流。 此方法僅用于調(diào)試。

setDaemon

public final void setDaemon(boolean on)

將此線程標(biāo)記為守護(hù)線程或用戶線程。 當(dāng)唯一運(yùn)行的線程都是守護(hù)線程時(shí),Java 虛擬機(jī)退出。

此方法必須在線程啟動(dòng)之前調(diào)用。

參數(shù):

參數(shù)名稱 參數(shù)描述
on 如果為true,則將此線程標(biāo)記為守護(hù)線程

Throws:

Throw名稱 Throw描述
IllegalThreadStateException 如果這個(gè)線程還活著
SecurityException if checkAccess() 判斷當(dāng)前線程不能修改這個(gè)線程

isDaemon

public final boolean isDaemon()

測(cè)試此線程是否為守護(hù)線程。

返回:

如果此線程是守護(hù)線程,則為 true; 否則為假。

checkAccess

public final void checkAccess()

確定當(dāng)前運(yùn)行的線程是否有權(quán)修改該線程。

如果有一個(gè)安全管理器,它的 checkAccess 方法會(huì)以這個(gè)線程作為它的參數(shù)被調(diào)用。 這可能會(huì)導(dǎo)致拋出 SecurityException。

Throws:

Throw名稱 Throw描述
SecurityException 如果當(dāng)前線程不允許訪問該線程。

toString

public String toString()

返回此線程的字符串表示形式,包括線程的名稱、優(yōu)先級(jí)和線程組。

覆蓋:

類 Object 中的 toString

返回:

此線程的字符串表示形式。

getContextClassLoader

public ClassLoader getContextClassLoader()

返回此線程的上下文 ClassLoader。 上下文 ClassLoader 由線程的創(chuàng)建者提供,供在該線程中運(yùn)行的代碼在加載類和資源時(shí)使用。 如果未設(shè)置,則默認(rèn)為父線程的 ClassLoader 上下文。 原始線程的上下文 ClassLoader 通常設(shè)置為用于加載應(yīng)用程序的類加載器。

如果存在安全管理器,并且調(diào)用者的類加載器不為 null 并且與上下文類加載器的祖先不同,則此方法調(diào)用安全管理器的 SecurityManager#checkPermission(java.security.Permission) 方法 RuntimePermission ("getClassLoader") 權(quán)限,用于驗(yàn)證是否允許檢索上下文類加載器。

返回:

此線程的上下文 ClassLoader,或 null 指示系統(tǒng)類加載器(或者,如果失敗,則為引導(dǎo)類加載器)

Throws:

Throw名稱 Throw描述
SecurityException 如果當(dāng)前線程無法獲取上下文 ClassLoader

setContextClassLoader

public void setContextClassLoader(ClassLoader cl)

設(shè)置此線程的上下文 ClassLoader。 上下文類加載器可以在創(chuàng)建線程時(shí)設(shè)置,并允許線程的創(chuàng)建者在加載類和資源時(shí)通過getContextClassLoader為線程中運(yùn)行的代碼提供合適的類加載器。

如果存在安全管理器,則使用 RuntimePermission ("setContextClassLoader") 權(quán)限調(diào)用其 SecurityManager#checkPermission(java.security.Permission) 方法,以查看是否允許設(shè)置上下文 ClassLoader。

參數(shù):

參數(shù)名稱 參數(shù)描述
cl 此線程的上下文 ClassLoader,或 null 指示系統(tǒng)類加載器(或者,如果失敗,則為引導(dǎo)類加載器)

Throws:

Throw名稱 Throw描述
SecurityException 如果當(dāng)前線程無法設(shè)置上下文 ClassLoader

holdsLock

public static boolean holdsLock(Object obj)

當(dāng)且僅當(dāng)當(dāng)前線程持有指定對(duì)象上的監(jiān)視器鎖時(shí)才返回 true。

此方法旨在允許程序斷言當(dāng)前線程已經(jīng)持有指定的鎖:

  1. assert Thread.holdsLock(obj);

參數(shù):

參數(shù)名稱 參數(shù)描述
obj 測(cè)試鎖所有權(quán)的對(duì)象

返回:

如果當(dāng)前線程持有指定對(duì)象的監(jiān)視器鎖,則為 true。

Throws:

Throw名稱 Throw描述
NullPointerException 如果 obj 為null

getStackTrace

public StackTraceElement[] getStackTrace()

返回表示此線程的堆棧轉(zhuǎn)儲(chǔ)的堆棧跟蹤元素?cái)?shù)組。如果此線程尚未啟動(dòng)、已啟動(dòng)但尚未被系統(tǒng)調(diào)度運(yùn)行或已終止,則此方法將返回一個(gè)長(zhǎng)度為零的數(shù)組。如果返回的數(shù)組長(zhǎng)度非零,則數(shù)組的第一個(gè)元素表示堆棧的頂部,這是序列中最近的方法調(diào)用。數(shù)組的最后一個(gè)元素表示堆棧的底部,它是序列中最近的方法調(diào)用。

如果有一個(gè)安全管理器,并且這個(gè)線程不是當(dāng)前線程,那么使用一個(gè) RuntimePermission("getStackTrace") 權(quán)限調(diào)用安全管理器的 checkPermission 方法,看看是否可以獲取堆棧跟蹤。

在某些情況下,某些虛擬機(jī)可能會(huì)從堆棧跟蹤中省略一個(gè)或多個(gè)堆棧幀。在極端情況下,允許沒有關(guān)于該線程的堆棧跟蹤信息的虛擬機(jī)從該方法返回一個(gè)長(zhǎng)度為零的數(shù)組。

返回:

StackTraceElement 數(shù)組,每個(gè)代表一個(gè)堆棧幀。

Throws:

Throw名稱 Throw描述
SecurityException 如果存在安全管理器并且其 checkPermission 方法不允許獲取線程的堆棧跟蹤。

getAllStackTraces

public static MapThread,StackTraceElement[] getAllStackTraces()

返回所有活動(dòng)線程的堆棧跟蹤映射。 映射鍵是線程,每個(gè)映射值是一個(gè) StackTraceElement 數(shù)組,表示相應(yīng)線程的堆棧轉(zhuǎn)儲(chǔ)。 返回的堆棧跟蹤采用為 getStackTrace 方法指定的格式。

調(diào)用此方法時(shí)線程可能正在執(zhí)行。 每個(gè)線程的堆棧跟蹤僅代表一個(gè)快照,并且每個(gè)堆棧跟蹤可能在不同的時(shí)間獲得。 如果虛擬機(jī)沒有關(guān)于線程的堆棧跟蹤信息,則將在映射值中返回一個(gè)長(zhǎng)度為零的數(shù)組。

如果有安全管理器,則使用 RuntimePermission("getStackTrace") 權(quán)限和 RuntimePermission("modifyThreadGroup") 權(quán)限調(diào)用安全管理器的 checkPermission 方法,查看是否可以獲取所有線程的堆棧跟蹤。

返回:

從 Thread 到 StackTraceElement 數(shù)組的 Map,表示相應(yīng)線程的堆棧跟蹤。

Throws:

Throw名稱 Throw描述
SecurityException 如果存在安全管理器并且其 checkPermission 方法不允許獲取線程的堆棧跟蹤。

getId

public long getId()

返回此線程的標(biāo)識(shí)符。 線程 ID 是創(chuàng)建此線程時(shí)生成的正長(zhǎng)整數(shù)。 線程 ID 是唯一的,并且在其生命周期內(nèi)保持不變。 當(dāng)一個(gè)線程被終止時(shí),這個(gè)線程 ID 可以被重用。

返回:

此線程的 ID。

getState

public Thread.State getState()

返回此線程的狀態(tài)。 此方法設(shè)計(jì)用于監(jiān)控系統(tǒng)狀態(tài),而不是用于同步控制。

返回:

這個(gè)線程的狀態(tài)。

setDefaultUncaughtExceptionHandler

public static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)

設(shè)置當(dāng)線程由于未捕獲的異常而突然終止時(shí)調(diào)用的默認(rèn)處理程序,并且沒有為該線程定義其他處理程序。

未捕獲的異常處理首先由線程控制,然后由線程的 ThreadGroup 對(duì)象控制,最后由默認(rèn)的未捕獲異常處理程序控制。 如果線程沒有明確的未捕獲異常處理程序集,并且線程的線程組(包括父線程組)沒有專門化其 uncaughtException 方法,則將調(diào)用默認(rèn)處理程序的 uncaughtException 方法。

通過設(shè)置默認(rèn)的未捕獲異常處理程序,應(yīng)用程序可以更改那些已經(jīng)接受系統(tǒng)提供的任何“默認(rèn)”行為的線程處理未捕獲異常的方式(例如記錄到特定設(shè)備或文件)。

請(qǐng)注意,默認(rèn)的未捕獲異常處理程序通常不應(yīng)遵循線程的 ThreadGroup 對(duì)象,因?yàn)檫@可能導(dǎo)致無限遞歸。

參數(shù):

參數(shù)名稱 參數(shù)描述
eh 用作默認(rèn)未捕獲異常處理程序的對(duì)象。 如果為 null,則沒有默認(rèn)處理程序。

Throws:

Throw名稱 Throw描述
SecurityException 如果存在安全管理器并且它拒絕 RuntimePermission ("setDefaultUncaughtExceptionHandler")

getDefaultUncaughtExceptionHandler

public static Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler()

返回當(dāng)線程由于未捕獲的異常而突然終止時(shí)調(diào)用的默認(rèn)處理程序。 如果返回值為 null,則沒有默認(rèn)值。

返回:

所有線程的默認(rèn)未捕獲異常處理程序

getUncaughtExceptionHandler

public Thread.UncaughtExceptionHandler getUncaughtExceptionHandler()

返回當(dāng)此線程由于未捕獲的異常而突然終止時(shí)調(diào)用的處理程序。 如果該線程沒有顯式設(shè)置未捕獲的異常處理程序,則返回該線程的 ThreadGroup 對(duì)象,除非該線程已終止,在這種情況下返回 null。

返回:

此線程的未捕獲異常處理程序

setUncaughtExceptionHandler

public void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)

設(shè)置當(dāng)此線程由于未捕獲的異常而突然終止時(shí)調(diào)用的處理程序。

線程可以通過顯式設(shè)置其未捕獲異常處理程序來完全控制它如何響應(yīng)未捕獲異常。 如果未設(shè)置此類處理程序,則線程的 ThreadGroup 對(duì)象充當(dāng)其處理程序。

參數(shù):

參數(shù)名稱 參數(shù)描述
eh 用作此線程的未捕獲異常處理程序的對(duì)象。 如果為 null,則此線程沒有顯式處理程序。

Throws:

Throw名稱 Throw描述
SecurityException 如果當(dāng)前線程不允許修改這個(gè)線程。
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)