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

来源:互联网 发布:mac上怎么使用git 编辑:程序博客网 时间:2024/06/07 21:10

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毫微秒。

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


0 0