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