我需要对跨线程工作的一些功能进行单元测试,为此我需要保证两个作业在不同的线程上运行。
使用Executors.newCachedThreadPool()
引入了竞争条件,因为测试可能会也可能不会使用缓存的线程池。
是否有ExecutorService
始终使用新线程?
答案 0 :(得分:6)
使用corePoolSize
0
keepAliveTime
和0
final ExecutorService executorService = new ThreadPoolExecutor(
0, 2, 0, TimeUnit.SECONDS, new SynchronousQueue<>());
executorService.submit(task1);
executorService.submit(task2);
。这将使新任务产生一个新线程,并在任务终止后立即终止线程。
例如:
{{1}}