/** * Created by xabcd on 2019/2/17. */ public class testjoin { public static void main(String[] args) { Threadtest t = new Threadtest(); Thread pp = new Thread(t); pp.start(); int i; for (i = 0;i<10;i++) { if (i == 5) { try { pp.join();//强制运行完一段线程后,再运行后面的线程 } catch(Exception e) { System.out.println("Exception"+e.getMessage()); } } System.out.println("main Thread "+i++); } } } class Threadtest implements Runnable { public void run() { String str = new String(); int i = 0; for (int x = 0;x<10;x++) { System.out.println(Thread.currentThread().getName()+"--->>"+i++); } } } 结果: main Thread 0 Thread-0--->>0 main Thread 2 main Thread 4 main Thread 6 main Thread 8 Thread-0--->>1 Thread-0--->>2 Thread-0--->>3 Thread-0--->>4 Thread-0--->>5 Thread-0--->>6 Thread-0--->>7 Thread-0--->>8 Thread-0--->>9 main Thread总是偶数??? 由上可见,pp线程中的代码被并入到了main之中(thrread0-rhread9是连续的),也就是pp线程中的代码不执行玩,main线程中的代码就只能一直等待着。查看JDK文档可以发现,除了无参数的join方法外,还有两个参数的join方法,分别是join(long millis)和join(龙millis,interesting nanos),它们的作用是指定合并时间,前者精确到毫秒,后者精确到纳秒,意思是两个线程合并指定的时间后,又开始分离,回到合并前的状态,可以试着改成有参数的,试试效果。