并发编程之join关键字的理解

在并发编程时有时候一个线程需要等另一个线程执行完之后才能执行,这时可以应该Thread类提供的join()方法来处理;
理解一、概念理解,描述:如果主线程想等子线程执行完成之后再结束,比如子线程处理一个数据,主线程要取得这个数据中的值,就会用到join方法,join的作用是等待线程对象销毁;
join方法是Thread类提供的方法,所有它是属于某个线程,例如主线程main要等A线程执行完在接着处理,可以描述为:
public static void main(String[] args){
        //其它代码
        A a = new A();
        a.join();
        //a线程执行完后再执行的代码

}

解释:方法join的作用是使所属的线程对象(如a)正常执行run()方法中的任务,而使当前线程(即main线程,a.join的所属线程是a线程,当前线程是main线程)进行无限的阻塞,等待到线程对象a销毁后才能继续执行当前线程中剩下的代码; 有类似同步的效果,只不过join利用wait方法实现的同步,关键字synchronized利用的是“对象监视器”原理同步的,而且join方法与interrupt()方法彼此遇到会出现异常; 理解二、join方法会释放锁,join(2000)和sleep(2000)两种方法看似都是等待了2秒,但二者有区别,join方法的等待使用wait方法实现的,所有join的等待有释放锁的效果,sleep不会释放锁; 理解三、join方法利用wait方法同步要理解wait的机制,如wait方法使用可以参考另外一个帖子:http://blog..net/weixin_38178584/article/details/78784474

经验分享 程序员 微信小程序 职场和发展