java線程之join阻塞測試

package book.test;

import java.util.ArrayList;
import java.util.List;

public class JoinDemo extends Thread{
    int i;
    Thread previousThread; //上一個線程
    public JoinDemo(Thread previousThread,int i){
        this.previousThread=previousThread;
        this.i=i;
    }
    @Override
    public void run() {
        try {
//          //調用上一個線程的join方法,大家可以自己演示的時候可以把這行代碼註釋掉
            //調用join方法,阻塞當前線程,讓調用此方法的線程運行完才運行當前線程
            previousThread.join();
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("num:"+i);
    }
    public static void main(String[] args) {
        Thread previousThread=Thread.currentThread();
        List<Thread> ls=new ArrayList<Thread>();
        for(int i=0;i<10;i++) {
            //第一種
            JoinDemo joinDemo = new JoinDemo(previousThread, i);//第一個參數傳的是上一個線程
            joinDemo.start();
            previousThread=joinDemo;

            //第二種
//            JoinDemo joinDemos = new JoinDemo(ls.size()>0?ls.get(i-1):previousThread, i);//第一個參數傳的是上一個線程
//            ls.add(joinDemos);
//            ls.add(joinDemos);
//            joinDemos.start();
        }
        System.out.println("開始運行");
    }
}

運行結果:

總結:

調用join方法,阻塞當前線程,讓調用此方法的線程運行完才運行當前線程

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