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