多线程(三) 控制线程之join线程

Java的线程支持提供了一些便捷的工具方法,通过这些便捷的工具方法可以很好地控制线程的执行。

Thread提供了让一个线程等待另一个线程完成的方法——join()方法。当在某个程序执行流中调用其他线程的join()方法时,调用线程将被阻塞,直到被join()加入的join()线程执行完为止。

join()方法通常由使用线程的程序调用,以将大问题划分成许多小问题,每个小问题分配一个线程。当所有的小问题都得到处理后,再调用主线程来进一步操作。

package gblw.fisrt;

public class JoinThread extends Thread{
	
	//提供一个有参数的构造器,用于设置该线程的名字
	public JoinThread(String name){
		super(name);
	}
	
	//重写run()方法,定义线程执行体
	public void run(){
		for(int i=0;i<100;i++){
			System.out.println(getName()+" "+i);
		}
	}
	
	public static void main(String[] args) throws InterruptedException {
		//启动子线程
		new JoinThread("新线程").start();
		for(int i=0;i<100;i++){
			if(i==20){
				JoinThread jt=new JoinThread("被Join的线程");
				jt.start();
				//main线程调用了jt线程的join()方法,main线程
				//必须等jt执行结束才会向下执行
				jt.join();
			}
			System.out.println(Thread.currentThread().getName()+" "+i);
		}
	}
}
join()方法有如下三种重载形式。

A、join():等待被join()的线程执行完成。

B、join(long millis):等待被join的线程的时间最长为millis毫秒。如果在millis毫秒内被join的线程还没有执行结束,则不再等待。

C、join(long millis,int nanos):等待被join的线程的时间最长为millis毫秒加nanos毫微秒。

通常很少使用第三种 形式,原因有两个:程序对时间的精度无须精确到毫微秒;计算机硬件、操作系统本身也无法精确到毫微秒。

多线程(三) 控制线程之join线程_第1张图片

你可能感兴趣的:(多线程)