1. 闭锁CountDownLatch
闭锁CountDownLatch用于线程间的同步,它可以使得一个或者多个线程等待其它线程中的某些操作完成。它有一个int类型的属性count,当某个线程调用CountDownLatch对象的await方法时,将会阻塞,直到count的值变成0;count值可以通过它的countDown的方法进行减1。 count的值在构造方法中进行指定。
注意count的值不可以重设,因此当count的值变成0后,CountDownLatch就不再起作用了,此时再调用它的await方法将会直接返回。也就是说,对它的重复使用是没有任何意义的。
它可以使用在以下场景:
当count的值为1时,可以作为一个开关,所有调用它的await方法的线程都一起等待,直到开关被某个其它线程打开;
当count的值为n时,可以使得一个或者多个线程等待其它n个线程完成了某些处理,或者某个线程执行了n次某项操作;
典型的用法如:将一个计算过程细分成n个子计算,主线程调用CountDownLatch的await方法等待子任务计算完成;而n个子线程处理每个子任务;当每个子任务执行完成后调用countDown方法。这样子任务计算完成时主线程就可以继续往下执行了。
注意:CountDownLatch本身是线程安全的,因此对它的方法的调用不需要再使用其它的同步机制。
1.1 示例
假设要主线程要等待其它一组线程执行完某个操作再继续执行,可以使用以下方式: