线程控制的基本方法
程序每次的運(yùn)行結(jié)果可能是不一樣的。這是因?yàn)槎鄠€(gè)線程在執(zhí)行時(shí)會(huì)搶占 CPU 資源,搶到之后才會(huì)執(zhí)行。而程序員是無法精準(zhǔn)控制這種搶奪情況的。盡管如此,Thread 類還提供了一些線程控制方法,雖不能精準(zhǔn)控制線程的搶奪情況,但能夠幫助我們更好的控制線程。
void start():使該線程開始執(zhí)行,Java 虛擬機(jī)負(fù)責(zé)調(diào)用該線程的 run() 方法。 void sleep(long millis):靜態(tài)方法,線程進(jìn)入阻塞狀態(tài),在指定時(shí)間(單位為毫秒)到達(dá)之后進(jìn)入就緒狀態(tài)。 void yield():靜態(tài)方法,當(dāng)前線程放棄占用 CPU 資源,回到就緒狀態(tài),使其他優(yōu)先級(jí)不低于此線程的線程有機(jī)會(huì)被執(zhí)行。 void join():只有當(dāng)前線程等待加入的線程完成,才能繼續(xù)往下執(zhí)行。 void interrupt():中斷線程的阻塞狀態(tài)(而非中斷線程),例如一個(gè)線程 sleep(1000000000) ,為了中斷這個(gè)過長(zhǎng)的阻塞過程,可以調(diào)用該線程的 interrupt() 方法,中斷阻塞。需要注意的是,此時(shí) sleep() 方法會(huì)拋出 InterruptedException 異常。 void isAlive():判定該線程是否處于活動(dòng)狀態(tài),處于就緒、運(yùn)行和阻塞狀態(tài)的都屬于活動(dòng)狀態(tài)。 void setPriority(int newPriority):設(shè)置當(dāng)前線程的優(yōu)先級(jí)。 int getPriority():獲得當(dāng)前線程的優(yōu)先級(jí)。線程通常在三種情況下會(huì)終止,最普遍的情況是線程中的 run() 方法執(zhí)行完畢后線程終止,或者線程拋出了異常且未被捕獲,另外還有一種情況是調(diào)用當(dāng)前線程的 stop() 方法終止線程(該方法已被廢棄)。
總結(jié)
- 上一篇: 定义线程的两种方式
- 下一篇: Oracle 序列和触发器