线程Thread中的join方法

join():等待线程完成

join线程:程序中有多个线程并发执行时,在某些时候,一个线程必须等待另一个(另几个)线程执行完成后,

该线程才能继续向下执行。

Thread提供了让一个线程等待另一个线程完成的方法:join() 方法。

当在某个程序执行流中调用其他线程的join()方法时,调用线程将被阻塞,直到被join方法加入的join线程完成为止。

join()方法有3个版本:

join(): 无限等待,必须等到被join的线程执行完成。

join(毫秒数): 只等待多少毫秒,程序在指定的毫秒内必须完成该任务。

join(毫秒数, 纳秒数):等待多少毫秒、多少纳秒。

class MyRunnable implements Runnable{   
    public void run(){

        for(int i =0;i<10;i++){

            System.out.println(Thread.currentThread().getName()+"-----"+Thread.currentThread().getPriority()+"---"+i);
        }
    }
}
public class JoinTest {

    public static void main(String[] args)throws Exception {

        Runnable myRunnable = new MyRunnable();

        Thread myThread = new Thread(myRunnable);
        
        Thread myThread2 = new Thread(myRunnable);

        //设置优先级 (注意优先级设置最好使用Thread常量来处理)

        /**

         * int MAX_PRIORITY 10 最大优先级 (将有机会获得更多的CPU时间片) 

           int MIN_PRIORITY 1  最小优先级 

           int NORM_PRIORITY 5 默认优先级 (如果不设置就是默认)

         */
        myThread2.setPriority(Thread.MAX_PRIORITY);
        myThread.start();
        myThread2.start();
        
        System.out.println("----------------------------");

        for(int i =0;i<10;i++){

            System.out.println(Thread.currentThread().getName()+"--"+Thread.currentThread().getPriority()+"-"+i);

            if(i == 3){

                System.out.println("------join------------");

                // 谁调用join,谁就会先执行,等待join进来的线程执行完毕其他的线程才可以继续执行

                myThread.join();
       
                myThread2.join();

            }
        }
    }
}

join方法会更优先执行

猜你喜欢

转载自billxiatian.iteye.com/blog/2379662