Thread api參考網址: https://tool.oschina.net/apidocs/apidoc?api=jdk-zh
一.Thread構造方法
| 構造方法摘要 | |
|---|---|
Thread()分配新的 Thread 物件, |
|
Thread(Runnable target)分配新的 Thread 物件, |
|
Thread(Runnable target, String name)分配新的 Thread 物件, |
|
Thread(String name)分配新的 Thread 物件, |
|
Thread(ThreadGroup group, Runnable target)分配新的 Thread 物件, |
|
Thread(ThreadGroup group, Runnable target, String name)分配新的 Thread 物件,以便將 target 作為其運行物件,將指定的 name 作為其名稱,并作為 group 所參考的執行緒組的一員, |
|
Thread(ThreadGroup group, Runnable target, String name, long stackSize)分配新的 Thread 物件,以便將 target 作為其運行物件,將指定的 name 作為其名稱,作為 group 所參考的執行緒組的一員,并具有指定的堆疊大小, |
|
Thread(ThreadGroup group, String name)分配新的 Thread 物件, |
|
java 中多執行緒的創建都是直接或者間接的通過 Thread的構造方法實作
二.Thread方法摘要
| 方法摘要 | |
|---|---|
static int |
activeCount()回傳當前執行緒的執行緒組中活動執行緒的數目, |
void |
checkAccess()判定當前運行的執行緒是否有權修改該執行緒, |
int |
countStackFrames()已過時, 該呼叫的定義依賴于 suspend(),但它遭到了反對,此外,該呼叫的結果從來都不是意義明確的, |
static Thread |
currentThread()回傳對當前正在執行的執行緒物件的參考, |
void |
destroy()已過時, 該方法最初用于破壞該執行緒,但不作任何清除,它所保持的任何監視器都會保持鎖定狀態,不過,該方法決不會被實作,即使要實作,它也極有可能以 suspend() 方式被死鎖,如果目標執行緒被破壞時保持一個保護關鍵系統資源的鎖,則任何執行緒在任何時候都無法再次訪問該資源,如果另一個執行緒曾試圖鎖定該資源,則會出現死鎖,這類死鎖通常會證明它們自己是“凍結”的行程,有關更多資訊,請參閱為何不贊成使用 Thread.stop、Thread.suspend 和 Thread.resume?, |
static void |
dumpStack()將當前執行緒的堆疊跟蹤列印至標準錯誤流, |
static int |
enumerate(Thread[] tarray)將當前執行緒的執行緒組及其子組中的每一個活動執行緒復制到指定的陣列中, |
static Map<Thread,StackTraceElement[]> |
getAllStackTraces()回傳所有活動執行緒的堆疊跟蹤的一個映射, |
ClassLoader |
getContextClassLoader()回傳該執行緒的背景關系 ClassLoader, |
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() 一起使用,但 suspend() 已經遭到反對,因為它具有死鎖傾向,有關更多資訊,請參閱為何不贊成使用 Thread.stop、Thread.suspend 和 Thread.resume?, |
void |
run()如果該執行緒是使用獨立的 Runnable 運行物件構造的,則呼叫該 Runnable 物件的 run 方法;否則,該方法不執行任何操作并回傳, |
void |
setContextClassLoader(ClassLoader cl)設定該執行緒的背景關系 ClassLoader, |
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 的許多使用都應由只修改某些變數以指示目標執行緒應該停止運行的代碼來取代,目標執行緒應定期檢查該變數,并且如果該變數指示它要停止運行,則從其運行方法依次回傳,如果目標執行緒等待很長時間(例如基于一個條件變數),則應使用 interrupt 方法來中斷該等待,有關更多資訊,請參閱為何不贊成使用 Thread.stop、Thread.suspend 和 Thread.resume?, |
void |
stop(Throwable obj)已過時, 該方法具有固有的不安全性,有關詳細資訊,請參閱 stop(), 該方法的附加危險是它可用于生成目標執行緒未準備處理的例外(包括若沒有該方法該執行緒不太可能拋出的已檢查的例外), 有關更多資訊,請參閱為何不贊成使用 Thread.stop、Thread.suspend 和 Thread.resume?, |
void |
suspend()已過時, 該方法已經遭到反對,因為它具有固有的死鎖傾向,如果目標執行緒掛起時在保護關鍵系統資源的監視器上保持有鎖,則在目標執行緒重新開始以前任何執行緒都不能訪問該資源,如果重新開始目標執行緒的執行緒想在呼叫 resume 之前鎖定該監視器,則會發生死鎖,這類死鎖通常會證明自己是“凍結”的行程,有關更多資訊,請參閱為何不贊成使用 Thread.stop、Thread.suspend 和 Thread.resume?, |
String |
toString()回傳該執行緒的字串表示形式,包括執行緒名稱、優先級和執行緒組, |
static void |
yield()暫停當前正在執行的執行緒物件,并執行其他執行緒, |
三.Thread常用方法
public static void main(String[] args) { Thread thread = new Thread(); thread.start();//啟動執行緒 //靜態的本地方法,回傳當前代碼正在被那個執行緒呼叫 Thread thread1 = Thread.currentThread(); //isAlive方法:判斷當前的執行緒是否處于活動狀態,即執行緒已經啟動并且尚未終止 boolean alive = thread1.isAlive(); //getId,取得執行緒的唯一標識 long id = thread.getId(); System.out.println(id); //sleep,指定毫秒數讓當前正在執行的執行緒休眠,也可以說是讓Thread.currentThread()方法回傳的執行緒休眠指定的毫秒數 try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } //判斷執行緒是否停止的兩個方法 thread.isInterrupted();//測驗執行緒是否已經中斷 Thread.interrupted();//測驗當前執行緒是否已經中斷 //3個過時方法 stop resume suspend thread.stop(); //暴力方法停止執行緒,可能出現不可預知的情況 thread.resume(); //方法繼續,不同步 thread.suspend(); //方法暫停,不同步 //yield 執行緒禮讓,放棄當前cpu資源供其它執行緒執行,但放棄時間不固定,可能剛放棄馬上又獲取cpu資源 Thread.yield(); //執行緒優先級 執行緒具有繼承,規則,隨機性 0-10 thread.setPriority(1); //守護執行緒,將執行緒設定成守護執行緒,當不存在守護執行緒,非守護執行緒自動銷毀,非常典型的守護執行緒時GC垃圾回收裝置 thread.setDaemon(true);
//執行緒中斷,配合interrupted方法非常溫柔并且可控的結束執行緒
thread.interrupt();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/158871.html
標籤:Java
