1. 執行緒生命週期:
執行緒的4個主要週期狀態為建立執行緒、可執行(runnable)、非可執行和終止(dead)。當例項化乙個thread並執行start()之後,執行緒進入runnable狀態並開始執行run()方法。
執行緒有優先權,由1(thread.min_priority)到10(thread.max_priority),預設是5(thread.norm_priority)。可以使用thread的setpriority()方法來設定執行緒的優先權,設定必須在1--10之間,否則會丟擲illegalargumentexception異常。
如果想讓當前的執行緒禮讓一下其他執行緒,讓其他執行緒有機會取得執行權,可以呼叫執行緒執行的yield()方法。例如:
有幾種狀況會讓執行緒進入not runnable狀態(或是blocked狀態):
(1) 呼叫sleep()方法
(2) 呼叫wait()方法
(3) 等待輸入/輸出完成
當執行緒在not runnable狀態時,表示有某些原因阻止它執行(例如等待使用者的文字輸入、偵聽網路連線等),執行緒排班器將不分配執行時間給這個執行緒,直到以下的幾個情況讓執行緒回到runnable狀態:
(1) 執行緒呼叫notify()
(2) 執行緒呼叫notifyall()
(3) 執行緒呼叫interrupt()
(4) 輸入/輸出結束
最後當執行的工作完成(或發生異常)而離開run()方法,則執行緒執行完畢,進入dead狀態。可以使用isalive()方法判斷執行緒是否存活。
2. 執行緒的加入(join)
當執行緒使用join()加入至另乙個執行緒時,另乙個執行緒會等待這個被加入的執行緒工作完畢,然後再繼續它的動作。join()的意思表示將執行緒加入成為另乙個執行緒的流程之一。使用範例如下:
public class threada
for(threadb threadb:threadblist)
try
}catch(interruptedexception e)
system.out.println("thread a 執行!"); } }
public class threadb extends thread
public void run()
system.out.println("thread b"+threadindex+" 即將結束。。。");
} catch(interruptedexception e) }
}程式啟動後主執行緒就開始,在主線程中新建threadb,並在啟動threadb後,將之加入主線程的流程之中。所以threadb必須先執行完畢,主線程都會再繼續執行它原本的流程。
如果程式中threadb沒有使用join()將之加入主線程的流程中,則最後一行顯示"threada 執行"的語句會先執行(因為threadb使用了sleep(),這讓主線程有機會取得時間來執行)。
3. 為了防止加入的執行緒執行時間太久,為了防止無止境地等待這個執行緒工作完畢,可以在join()上指定時間,例如join(10000),表示加入成為流程之一的執行緒至多處理10s。如果時間到了,加入的執行緒還沒處理完畢,就不理它了,當前的執行緒可以繼續執行原本的工作流程。
4. 執行緒的停止:如果要停止乙個執行緒的執行,不建議使用stop()來停止乙個執行緒的執行,api中thread()的stop方法已被標記為deprecated。所以,要停止乙個執行緒,最好自行實現。
乙個執行緒要進入dead狀態,就是執行完run()方法。簡單地說,如果要停止乙個執行緒的執行,就要提供乙個方式讓執行緒
可以完成run()的流程。
java執行緒學習
thread t new thread 這只是建立執行緒 t1.start 執行緒就緒狀態,執行緒還沒有執行,要等待cpu的呼叫 要是獲取到cpu的呼叫執行緒就開始執行,最終結束 遇到阻塞事件會進入阻塞狀態,阻塞狀態到就緒狀態,而不是執行狀態 執行緒分兩類 使用者執行緒和守護執行緒 使用者執行緒 執...
JAVA學習 執行緒
class exthread extends thread public void run public class threadaction class imthread implements runnable override public void run public class threa...
java學習筆記 執行緒
執行緒 多個有序嚴謹的指令集稱之為程式 程式的同時多執行稱之為程序 程式中不同執行路徑稱之為執行緒 多執行緒程式設計簡單 易於共享 效率高 執行緒開始 start 執行緒就緒狀態 執行緒執行 被其他執行緒搶占暫停執行 返回當前就緒 繼續執行 執行緒機率阻塞 訪問網路的時候 死亡狀態 執行緒的生命週期...