1. 程式人生 > >並發基礎(七) Thread 類的sleep()、yeild()、join()

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

trac public ron 其它 join() log join方法 args read

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結束



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