Java多線程:線程的休眠

希望某一個線程可以暫緩執行一次,那麼就可以使用休眠處理。在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資源就會執行,所以這個過程是有先後順序的。同理,線程休眠的時候也是有先後順序,只是這個中間時間特別短,所以感覺是一起執行,一起休眠,一起喚醒。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章