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