在多线程的交互过程中有这样一种情况,线程ThreadA会启动另外一个线程ThreadB,可能需要让线程ThreadB执行一些诸如计算之类的操作,此时线程ThreadA需要等待线程ThreadB执行结束,并处理线程ThreadB结束后的结果,这个时候我们就需要使用join方法了。
线程类Thread提供了三种join方法,分别是join()方法、join(long millis)、join(long millis,int nanos)。其中join( )方法会一直等待,直到该线程终止。如果在join期间有任意线程中断当前线程的时候会抛出InterruptedException异常,此时线程的中断状态也会被清除掉。另外两个带参数的join方法只是增加了时间上的限制。为了描述join的应用,我们看一个实例:
例子中主线程创建并调用了一个完成计算的线程对象thread,由于使用了join方法,主线程会一直等到线程对象thread对象执行结束才会打印出结果。
在例子中我们还看到了sleep方法的应用,sleep方法会使线程睡眠,系统提供了两个sleep方法分别是:sleep(long millis)和sleep(long millis,int nanos),参数millis是毫秒数,nanos则是纳秒数。线程实际的睡眠时间取决于不同系统的定时器和调度器的精度。在sleep过程中,如果被别的线程中断则会抛出InterruptedException异常,同时线程的中断状态会被清除掉。