希望某一個線程可以暫緩執行一次,那麼就可以使用休眠處理。在Thread類中提供的休眠的方法如下:
- 休眠:public static void sleep(long millis) throws InterruptedException
- 休眠:public static void sleep(long millis,int nanos)throws InterruptedException 參數是毫秒和納秒
在進行休眠的時候又可能會產生中斷異常“InterruptedException”,中斷異常屬於Exception的子類,所以證明該異常必須進行異常處理。
範例:觀察休眠處理
public class Main{
public static void main(String args[]) {
new Thread(()-> {
for(int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + "、i = " + i);
try { // 必須進行異常捕獲處理
Thread.sleep(100); // 線程休眠
}
catch(InterruptedException e) {
e.printStackTrace();
}
}
}, "線程對象").start();
}
}
休眠的主要特點是可以自動實現線程的喚醒,以繼續進行後續的處理。但是如果有多個線程對象,那麼休眠也是有先後順序的。
範例:產生多個線程對象進行休眠處理
public class Main{
public static void main(String args[]) {
for(int x = 0; x < 3; x++) {
new Thread(()-> {
for(int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + "、i = " + i);
try { // 必須進行異常捕獲處理
Thread.sleep(100); // 線程休眠
}
catch(InterruptedException e) {
e.printStackTrace();
}
}
}, "線程對象-" + x).start();
}
}
}
運行結果:
將產生三個線程對象,並且這三個對象執行的方法體是相同的。從執行結果來看感覺是若干個線程一起休眠一起被喚醒,但是實際上是有差別的。線程對象產生後會到就緒態,等待cpu資源,然後一旦獲得cpu資源就會執行,所以這個過程是有先後順序的。同理,線程休眠的時候也是有先後順序,只是這個中間時間特別短,所以感覺是一起執行,一起休眠,一起喚醒。