保证三个线程依次按顺序执行

Join方法:T3先执行,调用t2.join,让T2执行完后再执行T3.

在T2的run方法中,调用t1.join(),让T1执行完后再让T2执行。

public class JoinTest{
  public static void main(String[] args){
    final Thread t1 = new Thread(new Runnable(){
      public void run(){
        System.out.println("t1");
      }
    });
    
    final Thread t2 = new Thread(new Runnable(){
      public run(){
        try{
          //引用t1线程,等待t1线程执行完
          t1.join();
        }catch(InterruptedException e){
          e.printStackTrace();
        }
        System.out.println("t2");
      }
    });
    Thread t3 = new Thread(new Runnable(){
      public void run(){
        try{
          t2.join();
        }catch(InterruptedException e){
          e.printStackTrace();
        }
        System.out.println("t3");
      }
    });
    t3.start();
    t2.start();
    t1.start();
  }
}

newSingleThreadExecutor 这个线程池,保证线程里面的任务依次执行

public class TestJoin {
    public static void main(String[] args) throws InterruptedException {
        final Thread t1 = new Thread(new Runnable() {
            public void run() {
                System.out.println(Thread.currentThread().getName() + " run 1");
            }
        }, "T1");
        final Thread t2 = new Thread(new Runnable() {
            public void run() {
                System.out.println(Thread.currentThread().getName() + " run 2");
                try {
                    t1.join(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }, "T2");
        final Thread t3 = new Thread(new Runnable() {
            public void run() {
                System.out.println(Thread.currentThread().getName() + " run 3");
                try {
                    t2.join(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }, "T3");
        // method1
        //t1.start();
        //t2.start();
        //t3.start();
 
//        method 2 使用 单个任务的线程池来实现。保证线程的依次执行
        ExecutorService executor = Executors.newSingleThreadExecutor();
        executor.submit(t1);
        executor.submit(t2);
        executor.submit(t3);
        executor.shutdown();
    }
}

猜你喜欢

转载自blog.csdn.net/strawqqhat/article/details/89203715