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方法会更优先执行