Thread类的join()
让当前线程等待join线程执行结束
【原理】:当前线程不停检查join线程是否存活,若存活则一直等待。否则,调用this.notifyAll() 通知当前线程;
CountDownLatch
设置count初值,每一个子线程完成就减一,直至减为0表示所有子线程执行完成,count不支持重置,即一次性使用
【原理】:父线程调用await()方法(可以指定等待时间)进入等待状态直至count=0
CyclicBarrier
设置屏障需要拦截的线程数量,到达屏障的线程会调用await()方法表明达到屏障,并进入等待状态。当屏障数减为0时,表明目标数量的线程都到了,然后调用notifyAll()通知所有线程。
【与CountDownLatch的区别】:可以用reset()重置资源数,并且可以实现更复杂的场景:如 cyclicBarrier提供一种构造函数,用于在线程到达屏障时,优先执行Runnable barrierAction,可用于并行统计然后汇总计算的场景。
Future
线程池使用submit提交,会返回future_task,当任务完成后会返回结果,可以调用future.get()获取异步计算的结果(或异常),该方法是一个阻塞方法,即结果尚未返回时会阻塞当前线程的执行)