java中的Thread类的join

join是Thread的实例方法,官方解释为:等待该线程终止。
其作用就是将调用join的线程优先执行,当前正在执行的线程阻塞,直到调用join方法的线程执行完毕或者被打断,主要用于线程之间的交互。
还有两个重载的方法:
1、 join(long millis),等待该线程终止的时间最长为 millis 毫秒。为 0 意味着要一直等下去。
2、 join(long millis, int nanos),等待该线程终止的时间最长为 millis 毫秒 + nanos 纳秒。
下面以几个例子说明:
例1:
System.out.println("主线程开始.");
TaskD taskD = new TaskD();
taskD.start();
try {
	hread.sleep(2000);
	System.out.println("taskD join,主线程等待.");
	/*
	* 此处如果taskD没有join,那么主线程会优先执行完毕,taskD在未执行完毕时中断。
	* join之后,主线程等待线程taskD执行完毕再执行
	*/
	taskD.join();
} catch (InterruptedException e) {
	e.printStackTrace();
}
System.out.println("主线程结束.");
 

 
例2:
System.out.println("主线程开始.");
TaskD taskD = new TaskD();
TaskE taskE = new TaskE(taskD);
try {
	taskD.start();
	Thread.sleep(2000);
	taskE.start();
	/*
	* 此处taskE join,主线程等待,
	 * 在taskE执行时,taskD join,所以 最有的执行优先级时taskD,taskE,主线程
	*/
	taskE.join();
} catch (InterruptedException e) {
	e.printStackTrace();
}
System.out.println("主线程结束.");
例3:
System.out.println("主线程开始.");
		TaskD taskD = new TaskD();
		TaskE taskE = new TaskE(taskD);
		try {
			taskD.start();
			Thread.sleep(2000);
			taskE.start();
			/*
			 * 此处taskE不进行 join,主线程不等待,
			 * 在taskE执行时,taskD join, taskE等待taskD执行完毕再执行
			 * 但由于主线程没有阻塞,优先taskD和taskE执行完毕,所以taskD和taskE被中断。
			 */
			//System.out.println("taskE join,主线程等待.");
			//taskE.join();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("主线程结束.");
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值