http://blog.csdn.net/ghsau/article/details/17560467
本文來自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/17560467,轉載請注明。 最近在Review線程專欄,修改了諸多之前描述不夠嚴謹的地方,凡是帶有Review標記的文章都是修改過了。本篇文章是插進來的,因為原來沒有寫,現在來看傳統線程描述的不太完整,所以就補上了。理解了線程同步和線程通信之后,再來看本文的知識點就會簡單的多了,本文是做為傳統線程知識點的一個補充。有人會問:JDK5之后有了更完善的處理多線程問題的類(并發包),我們還需要去了解傳統線程嗎?答:需要。在實際開發中,無外乎兩種情況,一個是開發新內容,另一個是維護原有程序。開發新內容可以使用新的技術手段,但是我們不能保證原有程序是用什么實現的,所以我們需要了解原有的。另外一點,了解傳統線程的工作原理,使我們在使用并發包時更加得心應手。
void | interrupt() 中斷線程。 |
static boolean | interrupted() 測試當前線程是否已經中斷。 |
boolean | isInterrupted() 測試線程是否已經中斷。 |
%20 %20 %20 這樣的話,線程被順利的中斷執行了。很多人實現一個線程類時,都會再加一個flag標記,以便控制線程停止執行,其實完全沒必要,通過線程自身的中斷狀態,就可以完美實現該功能。如果線程在調用%20Object%20類的%20wait()、wait(long)%20或%20wait(long,%20int)%20方法,或者該類的%20join()、join(long)、join(long,%20int)、sleep(long)%20或%20sleep(long,%20int)%20方法過程中受阻,則其中斷狀態將被清除,它還將收到一個%20InterruptedException。%20我們可以捕獲該異常,并且做一些處理。另外,Thread.interrupted()方法是一個靜態方法,它是判斷當前線程的中斷狀態,需要注意的是,線程的中斷狀態會由該方法清除。換句話說,如果連續兩次調用該方法,則第二次調用將返回%20false(在第一次調用已清除了其中斷狀態之后,且第二次調用檢驗完中斷狀態前,當前線程再次中斷的情況除外)。
static void | yield() 暫停當前正在執行的線程對象,并執行其他線程 |
%20 %20 %20 輸出結果略,從輸出結果可以看到,當某個線程(t1或者t2)執行到10次、20次、30次等時,就會馬上切換到另一個線程執行,接下來再交替執行,如此往復。注意,如果存在synchronized線程同步的話,線程讓步不會釋放鎖(監視器對象)。
static void | sleep(long millis) 在指定的毫秒數內讓當前正在執行的線程休眠(暫停執行)。 |
static void | sleep(long millis,%20int nanos) 在指定的毫秒數加指定的納秒數內讓當前正在執行的線程休眠(暫停執行)。 |
void | join() 等待該線程終止。 |
void | join(long millis) 等待該線程終止的時間最長為 millis 毫秒。 |
void | join(long millis,%20int nanos) 等待該線程終止的時間最長為 millis 毫秒%20+ nanos 納秒。 |
| java.lang.Thread | ||
|---|---|---|
public static final int | MAX_PRIORITY | 10 |
public static final int | MIN_PRIORITY | 1 |
public static final int | NORM_PRIORITY | 5 |
新聞熱點
疑難解答