参考:https://blog.youkuaiyun.com/q258523454/article/details/81978855
自己测试通过的代码片段:
使用CountDownLatch
// 测试
int jobNum = 8;
CountDownLatch countDownLatch = new CountDownLatch(jobNum);
startTime = System.currentTimeMillis();
for (int i = 0; i < jobNum; i++) {
threadPool.execute(
() -> {
try {
System.println("job"+i);
// 这里写处理任务的代码
...
} catch (Throwable e) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
e.printStackTrace(new PrintStream(baos));
String errorMsg = baos.toString();
System.out.println("errorMsg:" + errorMsg);
} finally {
// 计数器count减少1
countDownLatch.countDown();
}
}
);
}
// 等待计数器中的count变为0
countDownLatch.await();
endTime = System.currentTimeMillis();
使用 awaitTermination
int numThread = 10;
milliSeconds1 = System.currentTimeMillis();
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(numThread);
for(int i = 0; i < numThread; i++) {
fixedThreadPool.execute(new Runnable () {
public void run() {
for(int i = 0 ; i < n/numThread; i++)
{
//safe=safe && orderRiskCheckRule2(orderData);
operations(orderData);
}
}
});
}
if(!fixedThreadPool.isShutdown()) {
fixedThreadPool.shutdown();
}
try {
fixedThreadPool.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
}
milliSeconds2 = System.currentTimeMillis();
res = (milliSeconds2-milliSeconds1);
msg = "CheckRule2 "+n+" times,total time spent: "+res+" milliseconds.";
log.info(msg);