我希望能够以串行方式运行一些任务。这种情况的典型解决方案是创建一个
Executor executor = Executors.newSingleThreadedExecutor();
并在此上运行任务。
不过,我已经有一个多线程的线程池了。
是否有一种简单的方法可以派生出一个子执行器,它的行为类似于单线程执行器(即:每次只运行一个任务),但是使用另一个(可能不是单线程的)执行器作为“后端”,而不是创建一个全新的操作系统线程?
有几种用例说明了我们为什么要这样做:
- 应用程序可能已经有一个线程池,例如用于后台任务,并设置了优先级等,我们希望重用该线程池。
- 同样地,我们可能会传入一个不仅仅是普通线程池的执行器(例如推迟执行以供稍后执行、测量执行时间等)。
- 其中的一个子集是传递MoreExecutors.directExecutor()进行测试(以便例如Futures立即解决)。
编辑:添加了上述示例