線程之Join使用

有三個線程T1,T2,T3,怎麼確保它們按順序執行?

可以利用Thread類的join方法。Thread類中的join方法的主要作用就是同步,它可以使得線程之間的並行執行變爲串行執行。當我們調用某個線程的這個方法時,這個方法會掛起調用線程,直到被調用線程結束執行,調用線程纔會繼續執行。

示例:
public class JoinTestSync {
 
    public static void main(String[] args) throws InterruptedException {
        // TODO Auto-generated method stub
        ThreadJoinTest1 t1 = new ThreadJoinTest1("今天");
        ThreadJoinTest1 t2 = new ThreadJoinTest1("明天");
        ThreadJoinTest1 t3 = new ThreadJoinTest1("後天");
        /*
         * 通過join方法來確保t1、t2、t3的執行順序
         * */
        t1.start();
        t1.join();  

        t2.start();
        t2.join();

        t3.start();
        t3.join();
    }
 
}

class ThreadJoinTest1 extends Thread{
    public ThreadJoinTest1(String name){
        super(name);
    }
    @Override
    public void run(){
        for(int i=0;i<5;i++){
            System.out.println(this.getName() + ":" + i);
        }
    }
}
join方法傳參和不傳參的區別?

join方法中如果傳入參數,則表示這樣的意思:如果A線程中調用B線程的join(10),則表示A線程會等待B線程執行10毫秒,10毫秒過後,A、B線程並行執行。需要注意的是,jdk規定,join(0)的意思不是A線程等待B線程0秒,而是A線程等待B線程無限時間,直到B線程執行完畢,即join(0)等價於join()。

join方法實現原理

join方法是通過調用線程的wait方法來達到同步的目的的。例如A線程中調用了B線程的join方法,則相當於在A線程中調用了B線程的wait方法,當B線程執行完(或者到達等待時間),B線程會自動調用自身的notifyAll方法喚醒A線程,從而達到同步的目的。

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