java thread类_java多线程之Thread类
Class Thread
java.lang.Object
java.lang.Thread
實(shí)現(xiàn)接口:Runnable
直接被繼承的子類(lèi):ForkJoinWorkerThread
public class Thread
extends Object
implements Runnable
thread是程序中的執(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è)線程都可能被標(biāo)記為一個(gè)守護(hù)線程。當(dāng)在某個(gè)線程中運(yùn)行的代碼創(chuàng)建一個(gè)新的線程對(duì)象時(shí),新線程的優(yōu)先級(jí)初始設(shè)置為創(chuàng)建它的線程的優(yōu)先級(jí),并且當(dāng)且僅當(dāng)創(chuàng)建它的線程是一個(gè)守護(hù)線程時(shí),它是一個(gè)守護(hù)線程。
當(dāng)Java虛擬機(jī)啟動(dòng)時(shí),通常只有一個(gè)非守護(hù)線程(通常稱(chēng)為某些指定類(lèi)的main方法),Java虛擬機(jī)繼續(xù)執(zhí)行線程,直到發(fā)生以下任何一種情況:
類(lèi)的exit方法在運(yùn)行時(shí)被調(diào)用,并且安全管理器允許exit操作發(fā)生。
所有非守護(hù)線程都已死亡,要么從調(diào)用run方法那里返回,要么拋出一個(gè)傳播到run方法之外的異常。
有兩種方法可以創(chuàng)建一個(gè)新的執(zhí)行線程,一種方法是將類(lèi)聲明為T(mén)hread的子類(lèi),這個(gè)子類(lèi)應(yīng)該重寫(xiě)類(lèi)Thread的run方法,然后可以分配并啟動(dòng)子類(lèi)的一個(gè)實(shí)例。例如,一個(gè)計(jì)算大于指定值的素?cái)?shù)的線程可以這樣寫(xiě):
class PrimeThread extends Thread {
PrimeThread(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
下面的代碼將創(chuàng)建一個(gè)線程并啟動(dòng)運(yùn)行:
PrimeThread p = new PrimeThread(143);
p.start();
另一種創(chuàng)建線程的方法是聲明實(shí)現(xiàn)Runnable接口的類(lèi),該類(lèi)實(shí)現(xiàn)run方法,然后可以分配類(lèi)的一個(gè)實(shí)例,在創(chuàng)建線程時(shí)作為參數(shù)傳遞,并啟動(dòng)。另一種風(fēng)格中的相同示例如下:
class PrimeRun implements Runnable {
long minPrime;
PrimeRun(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
下面的代碼將創(chuàng)建一個(gè)線程并啟動(dòng)運(yùn)行:
PrimeRun p = new PrimeRun(143);
new Thread(p).start();
每個(gè)線程都有一個(gè)用于標(biāo)識(shí)的名稱(chēng),多個(gè)線程可能具有相同的名稱(chēng),如果在創(chuàng)建線程時(shí)沒(méi)有指定名稱(chēng),將為它生成一個(gè)新名稱(chēng)。
除非另外注明,將null參數(shù)傳遞給該類(lèi)的構(gòu)造函數(shù)或方法將導(dǎo)致拋出NullPointerException。
自:JDK1.0,相關(guān)類(lèi)和方法:Runnable,Runtime.exit(int),run(),stop()
內(nèi)嵌類(lèi)匯總
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ù)匯總
Thread()
分配一個(gè)新的線程對(duì)象
Thread(Runnable target)
分配一個(gè)新的線程對(duì)象,使其具有target作為其運(yùn)行對(duì)象
Thread(Runnable target, String name)
分配一個(gè)新的線程對(duì)象,使其具有target作為其運(yùn)行對(duì)象,并具有指定的name作為其名稱(chēng)
Thread(String name)
分配一個(gè)新的線程對(duì)象,具有指定的name作為其名稱(chēng)
Thread(ThreadGroup group, Runnable target)
分配一個(gè)新的線程對(duì)象,使其具有target作為其運(yùn)行對(duì)象,并且屬于group引用的線程組
Thread(ThreadGroup group, Runnable target, String name)
分配一個(gè)新的線程對(duì)象,使其具有target作為其運(yùn)行對(duì)象,具有指定的name作為其名稱(chēng),并且屬于group引用的線程組
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
分配一個(gè)新的線程對(duì)象,使其具有target作為其運(yùn)行對(duì)象,具有指定的name作為其名稱(chēng),并且屬于由group引用的線程組,并具有指定的堆棧大小。
Thread(ThreadGroup group, String name)
分配一個(gè)新的線程對(duì)象,具有指定的name作為其名稱(chēng),并且屬于由group引用的線程組
方法匯總
static int activeCount()
返回當(dāng)前線程組及其子組中活動(dòng)線程的數(shù)量的估算
void checkAccess()
確定當(dāng)前運(yùn)行的線程是否具有修改該線程的權(quán)限
protected Object clone()
一個(gè)線程被沒(méi)有意義的克隆將拋出CloneNotSupportedException
int countStackFrames()
已廢棄。這個(gè)調(diào)用的定義依賴(lài)于suspend(),它已被廢棄,此外,這個(gè)調(diào)用的結(jié)果從來(lái)沒(méi)有明確的定義
static Thread currentThread()
返回對(duì)當(dāng)前執(zhí)行的線程對(duì)象的引用
void destroy()
已廢棄。此方法最初設(shè)計(jì)為在不進(jìn)行任何清理的情況下銷(xiāo)毀此線程,它所持有的任何監(jiān)視器都將保持鎖定狀態(tài),然而,該方法從未實(shí)現(xiàn),如果要實(shí)現(xiàn)的話,它很可能會(huì)像suspend()那樣出現(xiàn)死鎖。如果目標(biāo)線程在被銷(xiāo)毀時(shí)持有保護(hù)關(guān)鍵系統(tǒng)資源的鎖,則沒(méi)有線程可以再次訪問(wèn)該資源,如果另一個(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 Map getAllStackTraces()
返回所有活動(dòng)線程的堆棧跟蹤map
ClassLoader getContextClassLoader()
返回該線程的上下文類(lèi)加載器
static Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler()
返回由于未捕獲異常而突然終止的線程時(shí)調(diào)用的默認(rèn)處理程序
long getId()
返回該線程的標(biāo)識(shí)符
String getName()
返回該線程的名字
int getPriority()
返回該線程的優(yōu)先級(jí)
StackTraceElement[] getStackTrace()
返回表示該線程堆棧轉(zhuǎn)儲(chǔ)的堆棧跟蹤元素的數(shù)組
Thread.State getState()
返回此線程的狀態(tài)
ThreadGroup getThreadGroup()
返回該線程所屬的線程組
Thread.UncaughtExceptionHandler getUncaughtExceptionHandler()
返回由于未捕獲異常而突然終止此線程時(shí)調(diào)用的處理程序
static boolean holdsLock(Object obj)
如果且僅當(dāng)當(dāng)前線程持有指定對(duì)象上的監(jiān)視鎖時(shí),返回true
void interrupt()
中斷這個(gè)線程
static boolean interrupted()
測(cè)試當(dāng)前線程是否被中斷
boolean isAlive()
測(cè)試這個(gè)線程是否為存活
boolean isDaemon()
測(cè)試這個(gè)線程是否是一個(gè)守護(hù)線程
boolean isInterrupted()
測(cè)試這個(gè)線程是否被中斷
void join()
等待這個(gè)線程結(jié)束
void join(long millis)
最多等待millis毫秒后結(jié)束此線程
void join(long millis, int nanos)
最多等待millis毫秒加上nanos納米后結(jié)束此線程
void resume()
已廢棄。該方法僅用于使用suspend(),因?yàn)樗菀姿梨i,所以已被棄用。
void run()
如果這個(gè)線程是使用一個(gè)單獨(dú)的Runnable run對(duì)象構(gòu)造的,那么將調(diào)用該Runnable對(duì)象的run方法,否則,此方法將不執(zhí)行任何操作并返回。
void setContextClassLoader(ClassLoader cl)
設(shè)置此線程的上下文類(lèi)加載器
void setDaemon(boolean on)
將此線程標(biāo)記為守護(hù)線程或用戶(hù)線程
static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
設(shè)置由于未捕獲異常而導(dǎo)致線程突然終止時(shí)調(diào)用的默認(rèn)處理程序,并且沒(méi)有為該線程定義其他處理程序
void setName(String name)
將此線程的名稱(chēng)更改為與參數(shù)name相等的名稱(chēng)
void setPriority(int newPriority)
更改此線程的優(yōu)先級(jí)
void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
設(shè)置由于未捕獲異常而突然終止此線程時(shí)調(diào)用的處理程序
static void sleep(long millis)
使當(dāng)前執(zhí)行的線程在指定的毫秒數(shù)內(nèi)處于休眠狀態(tài)(暫時(shí)停止執(zhí)行),取決于系統(tǒng)定時(shí)器和調(diào)度器的精度和準(zhǔn)確性。
static void sleep(long millis, int nanos)
使當(dāng)前執(zhí)行的線程在指定的毫秒數(shù)加上指定的納秒數(shù)的情況下休眠(暫時(shí)停止執(zhí)行),取決于系統(tǒng)定時(shí)器和調(diào)度器的精度和準(zhǔn)確性
void start()
使該線程開(kāi)始執(zhí)行,Java虛擬機(jī)調(diào)用這個(gè)線程的run方法
void stop()
已廢棄。這個(gè)方法本質(zhì)上是不安全的,使用Thread.stop停止一個(gè)線程會(huì)使它解鎖它已鎖定的所有監(jiān)視器(作為未檢查的ThreadDeath異常向堆棧傳播的自然結(jié)果),如果這些監(jiān)視器之前保護(hù)的任何對(duì)象處于不一致的狀態(tài),則損壞的對(duì)象會(huì)對(duì)其他線程可見(jiàn),從而可能導(dǎo)致任意行為。應(yīng)該用簡(jiǎn)單地修改某些變量以表明目標(biāo)線程應(yīng)該停止運(yùn)行的代碼來(lái)替換stop的許多用法。目標(biāo)線程應(yīng)該定期檢查這個(gè)變量,如果該變量表明它將停止運(yùn)行,則以有序的方式從它的run方法返回。如果目標(biāo)線程等待很長(zhǎng)時(shí)間(例如,在條件變量上),則應(yīng)該使用中斷方法來(lái)中斷等待。
void stop(Throwable obj)
已廢棄。這種方法最初的目的是迫使線程停止并拋出一個(gè)給定的可拋出的異常,它本質(zhì)上是不安全的(參見(jiàn)stop()),而且還可以用于生成目標(biāo)線程不準(zhǔn)備處理的異常。
void suspend()
已廢棄。這個(gè)方法已經(jīng)被棄用,因?yàn)樗焐腿菀姿梨i。如果目標(biāo)線程在監(jiān)視器上持有鎖,以保護(hù)掛起的關(guān)鍵系統(tǒng)資源,則在目標(biāo)線程恢復(fù)之前,沒(méi)有線程可以訪問(wèn)該資源。如果要恢復(fù)目標(biāo)線程的線程試圖在調(diào)用resume之前鎖定此監(jiān)視器,則會(huì)導(dǎo)致死鎖。這種死鎖通常表現(xiàn)為“凍結(jié)”進(jìn)程。
String toString()
返回該線程的字符串表示形式,包括該線程的名稱(chēng)、優(yōu)先級(jí)和線程組
static void yield()
給調(diào)度器的一個(gè)提示,說(shuō)明當(dāng)前線程愿意提供當(dāng)前對(duì)處理器的使用
從類(lèi)java.lang.Object繼承的方法
equals, finalize, getClass, hashCode, notify, notifyAll, wait
字段的細(xì)節(jié)
MIN_PRIORITY
public static final int MIN_PRIORITY = 1
線程可以擁有的最小優(yōu)先級(jí)。
NORM_PRIORITY
public static final int NORM_PRIORITY = 5
分配給線程的默認(rèn)優(yōu)先級(jí)。
MAX_PRIORITY
public static final int MAX_PRIORITY = 10
線程可以擁有的最大優(yōu)先級(jí)。
構(gòu)造函數(shù)的細(xì)節(jié)
Thread
public Thread()
分配一個(gè)新的線程對(duì)象,這個(gè)構(gòu)造函數(shù)具有與Thread (null, null, gname)相同的效果,其中g(shù)name是一個(gè)新生成的名稱(chēng),自動(dòng)生成的名稱(chēng)為“Thread-”+n形式,其中n為整數(shù)。
Thread
public Thread(Runnable target)
分配一個(gè)新的線程對(duì)象,這個(gè)構(gòu)造函數(shù)具有與Thread (null, target, gname)相同的效果,其中g(shù)name是一個(gè)新生成的名稱(chēng),自動(dòng)生成的名稱(chēng)為“Thread-”+n形式,其中n為整數(shù)。
參數(shù):
target - 在啟動(dòng)該線程時(shí)調(diào)用其run方法的對(duì)象,如果為null,這個(gè)類(lèi)run方法什么都不做。
Thread
public Thread(ThreadGroup group, Runnable target)
分配一個(gè)新的線程對(duì)象,這個(gè)構(gòu)造函數(shù)具有與Thread (group, target, gname)相同的效果,其中g(shù)name是一個(gè)新生成的名稱(chēng),自動(dòng)生成的名稱(chēng)為“Thread-”+n形式,其中n為整數(shù)。
參數(shù):
group - 線程組,如果null并且有一個(gè)安全管理器,那么組由SecurityManager.getThreadGroup()決定,如果沒(méi)有安全管理器或SecurityManager.getThreadGroup()返回null,則將組設(shè)置為當(dāng)前線程的線程組。
target - 在啟動(dòng)該線程時(shí)調(diào)用其run方法的對(duì)象,如果為null,這個(gè)類(lèi)run方法什么都不做。
Throws:
SecurityException - 如果當(dāng)前線程不能在指定的線程組中創(chuàng)建線程。
總結(jié)
以上是生活随笔為你收集整理的java thread类_java多线程之Thread类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python实现程序重启_如何让pyth
- 下一篇: java删除指定的文件夹_java脚本删