1、join()Waits for this thread to die.join(long millis)Waits at most millis milliseconds for this thread to die. A timeout of 0 means to wait forever.join(long millis, int nanos)Waits at most millis milliseconds plus nanos nanoseconds for this thread to die.上面是jdk中对join的三个函数的解释,join()是等待调用此方法的线程结束,join(long millis)是等待线程结束或等待millis毫秒,当millis=0时就相当于join()方法,join(long millis, int nanos)则是将等待的时间精确到十亿分之一秒。。简单说就是join方法是让别的线程等待调用该方法的线程执行完或者等待一定的时间。
2、在eclipse中新建一个java工程项目,创建类Main。工程目录及Main.java的内容如图。
3、Main类中有一个静态的printNum方法和一个main方法。在main方法中创建两个线程,分别为a和b。如图,在线程b中,线程a调用了join()方法,运行程序,控制台输出如图。线程b在线程a结束后才继续执行。
4、接着如图将a.join()改为a.join(20)。运行程序,控制台输出如图。可以看到,加入时间限定后,线程b在线程a结束之前就开始执行了。
5、如图将a.join(20)改为a.join(200)。运行程序,控制台输出如图。线程b在线程a打印两个数后开始执行。说明线程b等待了线程a一定的时间。
6、最后如图给printNum加锁,运行程序,控制台输出如图。可以看到,加锁后,就算join()方法中加了时间限制,线程b仍得等待线程a执行完,释放锁后,才能继续执行。