CountDownLatch爲一個同步輔助類,在完成一組正在其他線程中執行的操作之前,它允許一個或多個線程一直等待。
方法說明:
await() 使當前線程在鎖存器倒計數至零之前一直等待,除非線程被中斷
countDown() 遞減鎖存器的計數,如果計數到達零,則釋放所有等待的線程
getCount() 返回當前計數
相關實例說明:
import org.springframework.stereotype.Component;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@Component
public class CountDownLatchTest {
public static void main(String[] args) throws InterruptedException {
final CountDownLatch begin = new CountDownLatch(1);
final CountDownLatch end = new CountDownLatch(10);
ExecutorService es = Executors.newFixedThreadPool(10);
for (int i = 0; i < 10; i++) {
final int index = i + 1;
es.submit(new Runnable() {
public void run() {
try {
begin.await(); // 等待指令
int s = (int)(Math.random() * 1000);
Thread.sleep(s);
System.out.println(String.format("No.%d到達,花費時間:%d毫秒!", index, s));
end.countDown();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
System.out.println("各就位,預備跑!");
begin.countDown();
end.await();
System.out.println("Game over!");
es.shutdown();
}
}