更新時間:2021-11-10 來源:黑馬程序員 瀏覽量:
線程的優(yōu)先級是優(yōu)先級高的程序會先執(zhí)行,而優(yōu)先級低的程序會后執(zhí)行。如果希望人為地控制線程,使正在執(zhí)行的線程暫停,將CPU讓給別的線程,這時可以使用靜態(tài)方法sleep(long
millis),該方法可以讓當(dāng)前正在執(zhí)行的線程暫停一段時間,進(jìn)入休眠等待狀態(tài)。當(dāng)前線程調(diào)用sleep(long
millis)方法后,在指定時間(單位毫秒)內(nèi)該線程是不會執(zhí)行的,這樣其他的線程就可以得以執(zhí)行了。
sleep(long
millis)方法聲明會拋出InterrupledException異常,因此在調(diào)用該方法時應(yīng)該捕獲異常,或者聲明拋出該異常。下面通過一個案例來演示sleep(long
millis)方法在程序中的使用。
public class Example02{ public static void main(String[] args)throws Exception{ //創(chuàng)建一個線程 new Thread(new SleepThread()).start(); for(int i=1;i<=10;i++){ if(i == 5){ Thread.sleep(2000); //當(dāng)前線程休眠2秒 } System.out.println("主線程正在輸出:"+i); Thread.sleep (500); //當(dāng)前線程休眠500毫秒 } } } // 定義SleepThread類實(shí)現(xiàn)Runnable接口 class SleepThread implements Runnable{ public void run(){ for (int i=1;i<=10; i++){ if(i ==3){ try { Thread.sleep(2000);//當(dāng)前線程休眠2秒 }catch(InterruptedException e){ e.printStackTrace(); } } System.out.println("SleepThread線程正在輸出:"+i); try{ Thread.sleep(500); //當(dāng)前線程休眠500毫秒 }catch (Exception e){ e.printStackTrace(); } } } }
上面代碼運(yùn)行結(jié)果如下圖所示。
代碼中第15~31行代碼定義了一個SleepThread類并實(shí)現(xiàn)了Runnable接口。在SleepThread類中重寫了run()方法,run()方法中使用for循環(huán)打印線程輸出語句;第26~30行代碼使用sleep()方法設(shè)置線程休眠500毫秒;在第18~24行代碼中使用if判斷當(dāng)變量i=3時,線程休眠2000毫秒;第4行中使用new關(guān)鍵詞創(chuàng)建了一個SleepThread線程并啟動;在第5~12行代碼中使用for循環(huán)打印主線程的輸出語句,并在第10行代碼使用sleep()方法設(shè)置線程休眠500毫秒;在第6~8行代碼中使用if判新出當(dāng)變量i=5時,線程休眠2000毫秒。
猜你喜歡