/*
* join()方法实现上使调用它的线程插入运行,阻塞当前的执行,知道调用它的线程的执行,知道调用它的线程执行完毕,才恢复被阻塞线程的运行。
* 如果调用它的线程是无限循环,其他线程则得不到执行。如果其他线程终端它的运行,则会抛出它的运行,则会抛出异常InterruptedException,
* 而停止继续运行。
*
* 在几何学中,圆周率可用4(1-1/3+1/5-1/7+1/9……)逼近。如下例子利用join()来正确打印线程执行完毕后产生的圆周率PI。如果没有利用join(),
* 主线程main首先被执行而子线程还没有得到运行时,将打印0.0;
*
*/
/*
* 功能:演示线程中加入join的用法,特例
* 作者:鲍志强
* 日期:2010年4月1日
*/
package 线程中join函数的用法;
public class Demo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Thread demo=new Estimate();
demo.start();
try{
demo.join(); // 阻塞主线程运行直到demo运行完毕
}catch(Exception e)
{
e.printStackTrace();
}
System.out.println("PI="+Estimate.PI); //打印PI
}
}
//线程类
class Estimate extends Thread
{
public static double PI=0.0;
private int sign=1;
//覆盖run方法
public void run()
{
//估算圆周率PI
for(long i=1;i<=9999999;i+=2)
{
PI+=4.0*(double)sign/i;
sign=-sign;
}
}
}