1. 程式人生 > >Java多執行緒方法說明

Java多執行緒方法說明

簡單說明

博文中提到的"可參閱博文"還沒來得及寫,見諒!

靜態方法

Thread Thread.currentThread() 該方法用於獲取當前執行緒物件,當我們用Runnable方式來實現run的時候,run中的this指向的不是執行緒物件,此時你要獲取當前執行緒,就可以用該方法。 void Thread.sleep(long millis) 使當前執行緒進入TIMED_WAITING狀態,millis引數單位為毫秒,表示進入TIMED_WAITING狀態的時間。該方法呼叫後會繼續佔用共享資源和CPU。 void Thread.sleep(long millis, int nanos) 兩個引數的sleep還是那個sleep,nanos表示納秒,睡眠時間則為毫秒數+納秒數。普及一下,1毫秒=1000微秒=1000000納秒。nanos取值是閉區間[0,999999],有了這個方法,也就可以做到微秒和納秒級的sleep了。 boolean Thread.interrupted() 返回當前執行緒是否被中斷。如果被中斷,則返回true並且將中斷標識重新設定為false。詳情請參閱《Java多執行緒 - 執行緒的中斷》。 int Thread.activeCount() API上說了,返回當前執行緒的執行緒組中活動執行緒的數目。這句話我讀懂了,但是當前執行緒的執行緒組包含了哪些執行緒呢?活動執行緒指的是什麼狀態下的執行緒呢?這在《Java多執行緒 - 什麼是活躍執行緒》博文中進行了較深入的探究。 void Thread.yield() Thread類中的註釋說了,該方法被執行後,意味著當前程式願意讓出它所使用的處理器。我們可以深入理解並總結一下:該方法執行後,表示當前執行緒讓出處理器,別的執行緒可以使用當前執行緒所使用的處理器了,但並不意味當前執行緒不會在讓出後立馬重新獲取到了讓出的處理器。在同步塊中,也並不意味著釋放了同步鎖。 Map<Thread, StackTraceElement[]> Thread.getAllStackTraces() 看該方法中的註釋和自己寫程式碼驗證,這個方法用於獲取當前時間點所有活躍執行緒中的方法呼叫記錄(堆疊快照),例如A呼叫了B,B呼叫了C,那麼得到當前執行緒下方法的呼叫記錄為C,B,A。這在博文《Java多執行緒 - StackTrace》中進行了較深入的探究。 int Thread.enumerate(Thread tarray[]) 該方法會將當前時間點所有的活躍執行緒裝載到tarray陣列當中去。注意,並不是當前執行緒下的活躍子執行緒。 void Thread.dumpStack() 這個方法的原始碼只有一句程式碼:new Exception(“Stack trace”).printStackTrace(); 目的是用於列印當前執行緒在當前時間點的堆疊記錄。 native void Thread.holdsLock(Object obj) 這是一個native方法,用於判斷當前執行緒是否獲取到了obj的同步鎖。方法註釋上,說明這個方法的設計是用於assert的,我也想不出來有什麼場景下可以assert。所以明白這個意思就好了。 void Thread.setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler eh) 該方法用於設定執行緒預設的異常處理物件(作用在所有的執行緒物件上),在一個執行緒中,如果出現了異常,但我們沒有捕獲處理,那麼就會交給UncaughtExceptionHandler來處理。詳情參閱博文《Java多執行緒 - UncaughtExceptionHandler詳解》 void Thread.getDefaultUncaughtExceptionHandler() 該方法用於獲取執行緒預設處理器。 例項方法

synchronized void setName(String name) 設定執行緒名稱,為了確保多個執行緒同時設定名稱,該方法被設計為同步方法 final void setDaemon(boolean on) 設定執行緒為守護執行緒,什麼是守護執行緒?詳情請參閱《Java多執行緒 - 守護執行緒》 final void setPriority(int newPriority) 設定執行緒執行優先順序,取值為一個閉區間[1,10]。如果給定的值不在閉區間內,則會丟擲java.lang.IllegalArgumentException。可以檢視原始碼來得到這個結論: public final void setPriority(int newPriority) {     ThreadGroup g;     checkAccess();     if (newPriority > MAX_PRIORITY || newPriority < MIN_PRIORITY) {         throw new IllegalArgumentException();     }     if((g = getThreadGroup()) != null) {         if (newPriority > g.getMaxPriority()) {             newPriority = g.getMaxPriority();         }         setPriority0(priority = newPriority);     } } 1 2 3 4 5 6 7 8 9 10 11 12 13 void setUncaughtExceptionHandler(UncaughtExceptionHandler eh) 該方法用於設定當前執行緒物件的異常處理器。執行緒可以有自己的異常處理器,如果執行緒本身沒有設定異常處理器,那麼會交給預設的異常處理器處理。詳情請參閱《Java多執行緒 - UncaughtExceptionHandler詳解》

void setContextClassLoader(ClassLoader cl) 設定執行緒上下文的類載入器,至於不同的載入器對執行緒的影響,有興趣的同學可以先詳細瞭解一下類載入器。

final String getName() 獲取執行緒名稱

final long getId() 獲取執行緒ID

StackTraceElement[] getStackTrace() 獲取當前執行緒在當前時間點的堆疊快照。什麼是堆疊快照,詳情請參閱見《Java多執行緒 - StackTrace》

ThreadGroup getThreadGroup() 獲取當前執行緒物件的執行緒組物件。什麼是執行緒組?詳情請參閱《Java多執行緒 - ThreadGroup》

ClassLoader getContextClassLoader() 獲取當前執行緒的類載入器

int getPriority() 獲取執行緒優先順序

State getState() 獲取當前執行緒物件的執行緒狀態物件

UncaughtExceptionHandler getUncaughtExceptionHandler() 獲取當前執行緒的異常處理器

synchronized void start() 用於啟動執行緒,該方法呼叫後,執行緒進入RUNNABLE狀態。注意這個方法是同步的,這是為了避免多個執行緒同時對Thread物件進行start。

void run() 執行緒的主體方法,執行緒被執行的就是這個方法

final void checkAccess()

void interrupt() 詳情請參見《Java多執行緒 - 執行緒的中斷》

final boolean isDaemon() 判斷當前執行緒物件是否為守護執行緒,什麼是守護執行緒。參見《Java多執行緒 - 守護執行緒》

boolean isInterrupted() 詳情請參見《Java多執行緒 - 執行緒的中斷》

final native boolean isAlive() 判斷當前執行緒是否還“活著”,注意:這是一個final native方法,仔細想想,這麼去修飾是合情合理的。

final void join() throws InterruptedException 詳情請參見《Java多執行緒 - join方法的探究》

final synchronized void join(long millis) throws InterruptedException 詳情請參見《Java多執行緒 - join方法的探究》

final synchronized void join(long millis, int nanos) throws InterruptedException 詳情請參見《Java多執行緒 - join方法的探究》 ---------------------  作者:League.Chinack  來源:CSDN  原文:https://blog.csdn.net/u012627861/article/details/83001857?utm_source=copy  版權宣告:本文為博主原創文章,轉載請附上博文連結!