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方法:
- join( ):等待該線程終止。
- join(long millis):等待該線程終止的時間最長為 millis 毫秒。超時為 0 意味着要一直等下去。
- 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結束