並發基礎(七) Thread 類的sleep()、yeild()、join()


1、Thread.sleep(long millis )

sleep( )是一個靜態方法,讓當前正在執行的線程休眠(暫停執行),而且在睡眠的過程是不釋放資源的,保持着鎖。
在睡眠的過程,可以被中斷,注意拋出InterruptedException異常;
作用:
1、暫停當前線程一段時間;
2、讓出CPU,特別是不想讓高優先級的線程讓出CPU給低優先級的線程

try {
		//單位是毫秒,睡眠1秒
		Thread.sleep(1000);
	} catch (InterruptedException e) {
		e.printStackTrace();
	}

2、Thread.yeild()

同樣也是一個靜態方法,暫停當前正在執行的線程,線程由運行中狀態進入就緒狀態,重新與其他線程一起參與線程的調度。
作用:
線程讓步,顧名思義,就是說當一個線程使用了這個方法之后,它就會把自己CPU執行的時間讓掉,讓自己或者其它的線程運行。但是,這種讓步只對同優先級或者更高優先級的線程而言,同時,讓步具有不確定性,當前線程也會參與調度,即有可能又被重新調度,那么就沒有達到讓出CPU的效果了。

3、Thread.join()

JDK中提供三個版本的join方法:

  1. join( ):等待該線程終止。
  2. join(long millis):等待該線程終止的時間最長為 millis 毫秒。超時為 0 意味着要一直等下去。
  3. join(long millis, int nanos):等待該線程終止的時間最長為 millis 毫秒 + nanos 納秒。
    作用:
    join方法的作用是父線程等待子線程執行完成后再執行,換句話說就是將異步執行的線程合並為同步的線程。
public static void main(String[] args) {
	
	Thread childThread = new Thread("childThread"){
		@Override
		public void run() {
			int a = 1;
			for(int i=1;i<5;i++){
				a += i;
			}
			System.out.println("線程"+getName()+"結束,Count a = "+a);
		}
	};
	//線程啟動
	childThread.start();
	try {
		//main線程要等待childThread線程的結束,才可以往下執行
		childThread.join();
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
	
	System.out.println("線程"+Thread.currentThread().getName()+"結束");
	
}

運行結果:

線程childThread結束,Count a = 11
線程main結束




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM