spring boot的测试问题,求解答

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@Transactional
@SpringApplicationConfiguration(Application.class)
public class Main {

static Log logger = LogFactory.getLog(Main.class);

@Test
public void test() {        
    ExecutorService fixedThreadPool = Executors.newFixedThreadPool(11);
    for (int i = 0; i < 10; i++) {
        fixedThreadPool.execute(new Runnable() {
            @Override
            public void run() {
                System.out.println("a");
            }
            
        });
    }
    System.out.println("b");
}

为什么输出结果是ab,而不是10个a和1个b

阅读 1.8k
1 个回答

单元测试运行结束后会强制退出进程。所以剩下的线程并不会执行。你可以使用下面的示例等待所有任务执行完成。

ExecutorService executorService = Executors.newFixedThreadPool(11);
CountDownLatch latch = new CountDownLatch(10);
for (int i = 0; i < 10; i++) {
    final int v = i;
    executorService.execute(() -> {
        latch.countDown();
        System.out.println(v + " - a");
    });
}
System.out.println("b");
try {
    // 等待所有任务结束
    latch.await();
} catch (InterruptedException e) {
    e.printStackTrace();
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题