/**
* 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),它们的作用是指定合并时间,前者精确到毫秒,后者精确到纳秒,意思是两个线程合并指定的时间后,又开始分离,回到合并前的状态,可以试着改成有参数的,试试效果。