在上面的例子中多次使用到了Thread类的join方法我想大家可能已经猜出来join方法的功能是什么了对join方法的功能就是使异步执行的线程变成同步执行也就是说当调用线程实例的start方法后这个方法会立即返回如果在调用start方法后后需要使用一个由这个线程计算得到的值就必须使用join方法如果不使用join方法就不能保证当执行到start方法后面的某条语句时这个线程一定会执行完而使用join方法后直到这个线程退出程序才会往下执行下面的代码演示了join的用法
package mythread;
publicclassJoinThreadextendsThread
{
publicstaticvolatileintn=;
publicvoidrun()
{
for(inti=;i<;i++n++)
try
{
sleep();//为了使运行结果更随机延迟毫秒
}
catch(Exceptione)
{
}
}
publicstaticvoidmain(String[]args)throwsException
{
Threadthreads[]=newThread[];
for(inti=;i<threadslength;i++)//建立个线程
threads[i]=newJoinThread();
for(inti=;i<threadslength;i++)//运行刚才建立的个线程
threads[i]start();
if(argslength>)
for(inti=;i<threadslength;i++)//个线程都执行完后继续
threads[i]join();
Systemoutprintln(n=+JoinThreadn);
}
}
在例程中建立了个线程每个线程使静态变量n增加如果在这个线程都执行完后输出n这个n值应该是
测试
使用如下的命令运行上面程序
java mythreadJoinThread
程序的运行结果如下
n=
这个运行结果可能在不同的运行环境下有一些差异但一般n不会等于从上面的结果可以肯定这个线程并未都执行完就将n输出了
测试
使用如下的命令运行上面的代码
在上面的命令行中有一个参数join其实在命令行中可以使用任何参数只要有一个参数就可以这里使用join只是为了表明要使用join方法使这个线程同步执行
程序的运行结果如下
n=
无论在什么样的运行环境下运行上面的命令都会得到相同的结果n=这充分说明了这个线程肯定是都执行完了因此n一定会等于