Tread类中的join方法的简单使用

Tread类中的join方法的简单使用

在此之前,自己也不是很熟悉join()的这个方法,不过现在既然看到了,就记录一下这个方法的作用。

简单一句话说,join()方法就是使得异步执行的线程变成同步执行。也就是说,当调用线程实例的start方法后,这个方法会立即返回,如果在调用start方法后,需要使用一个由这个线程计算得到的值,就必须使用join方法。如果不使用join方法,就不能保证当执行到start方法后面的某条语句的时候,这个线程一定会执行完。但是使用了join方法之后,那么系统就会等调用join方法的这个线程退出之后,程序才会继续往下执行。

直接贴代码吧,感觉这样会更好理解一点:

public class JoinThread extends Thread{

public static int n=0;

static synchronized void inc(){
	n++;
}

public void run (){
	for (int i = 0; i <10; i++) {
		try {
			inc();
			sleep(3);
			
		} catch (Exception e) {
			
		}
		
	}
}


public static void main(String[] args) {
	Thread threads[]=new Thread[100];
	for (int i = 0; i < threads.length; i++) 
		threads[i]=new JoinThread();
		for (int i = 0; i < threads.length; i++) 
			threads[i].start();
			for (int i = 0; i < threads.length; i++) 
				try {
					threads[i].join();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			
			//这里是直接利用类名调用静态变量n,这个就是静态变量的作用
				System.out.println("n="+JoinThread.n);
			}
		
	}

在这个例子中建立了100个线程,每个线程使得静态变量n增加10,如果在这个100个线程都执行完后输出n,那么这个n的值应该是1000。

所以在这里我把运行结果分为两种情况:

1、未采用join()方法的运行结果有很多种:

2、采用了join()方法的运行结果:

假设你不用join方法的话,那么你在这个里的输出结果可能就有很多种了,而且这个运行的结果在不同的环境下会有些差异。但是一般n的值不会等于1000,因为,这100个线程可能并未都执行完就将n输出了。