JAVA多线程-线程间通信(四)-join的使用

方法join的使用

        在很多情况下,主线程创建并启动子线程,如果子线程中要进行大量的耗时运算,主线程往往将早于子线程结束之前结。这时,如果主线程想等待子线程执行完成之后再结束,比如子线程处理一个数据,主线程要取得这个数据中的值,就要用到join()这个方法了。方法join()的作用是等待线程对象销毁

demo案例

package org.jksoft.thread.join;
/**
 * 测试案例一:让主线程在子线程结束之后,再结束。我们利用的是join方法
 * @author mcl
 *
 * 2016-2-20-下午6:08:36
 */
public class Test1 {
	public static void main(String[] args) {
		Thread thread = new TestThread("子线程");
		thread.start();
		try {
			thread.join();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("我等到子线程结束了");
	}
}
class TestThread extends Thread{
	public TestThread(String name){
		this.setName(name);
	}
	public void run(){
		long a = (long)(Math.random()*10000);
		try {
			sleep(a);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(Thread.currentThread().getName()+":"+a);
	}
}
  运行结果

 结果分析

       方法join的作用是使所属的线程对象A正常执行run()方法中的任务,而使当前主线程无期限的阻塞,等待线程A销毁后,再继续执行主线程后面的代码。

      方法join具有使线程排队的作用,有些类似同步的运行效果。

join详解:

 1、join与synchronized的区别

      join在内部使用wait()进行等待,而synchronized关键字使用的是“对象监视器”原理做为同步。

 2、join与interrupt彼此遇到的话,则会出现异常

 3、join(long):参数为设定等待时间。表示主线程只等待子线程x秒,在X秒之间内,子线程结束,则唤醒主线程;否则,直接唤醒主线程。

 4 、join(long)与sleep(long)的区别

       由于join(long)的内部使用的是wait(long),所以它具有释放锁的特点,而sleep(long)不会释放锁。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值