CountDownLatch
可以对多线程进行拦截, 直至倒计时为0才放行
如下代码, 用于测试SimpleDateFormat
是否线程安全
@Test
public void simpleFormatTest() {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List<String> listDateStr = Lists.newArrayList("2022-07-07 00:00:00", "2022-07-07 01:11:11", "2022-07-07 02:22:22", "2022-07-07 03:33:33", "2022-07-07 04:44:44", "2022-07-07 05:55:55");
ExecutorService executorService = Executors.newCachedThreadPool();
// 通过CountDownLatch, 可以加强并发, 让倒计时为0时一起格式化
CountDownLatch countDownLatch = new CountDownLatch(listDateStr.size());
for (String dateStr : listDateStr) {
executorService.submit(() -> {
try {
countDownLatch.await();
System.out.println(format.parse(dateStr));
} catch (Exception e) {
e.printStackTrace();
}
});
countDownLatch.countDown();
System.out.println("倒计时:" + countDownLatch.getCount());
}
try {
countDownLatch.await();
System.out.println("主线程最后执行");
System.out.println(format.parse("2022-07-07 06:06:06"));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
网友评论