多线程跑单测一般碰到的问题就是主线程执行完之后子线程还在运行,但是单测就结束了拿不到结果。
所以本质上只需要子线程执行完毕之后告诉主线程,再这之前主线程一直等待即可。
如果是线程池可以这样:
for (int i = 0; i < 50; i++) {
executorServicePool.execute(new Worker(i));
}
executorServicePool.shutdown();
while (!executorServicePool.awaitTermination(1, TimeUnit.SECONDS)) {
logger.info("worker running");
}
logger.info("worker over");
每隔一秒钟检查一次线程池里的任务执行完没有,没有执行完就阻塞主线程。
CountDownLatch 这样的并发工具也不错。
private static void countDownLatch() throws Exception{
int thread = 3 ;
long start = System.currentTimeMillis();
final CountDownLatch countDown = new CountDownLatch(thread);
for (int i= 0 ;i
new Thread(new Runnable() {
@Override
public void run() {
LOGGER.info