Java:另一个多线程执行器中的单线程子执行器

标签 java multithreading

我想以序列化的方式运行一些任务。典型的解决方案是创建一个

Executor executor = Executors.newSingleThreadedExecutor();

并在这个上运行任务。

但是,我已经有了一个多线程的线程池。

是否有一种简单的方法来派生一个行为类似于单线程的子执行器(如:一次只运行一个任务)但使用另一个(可能是非单线程的)执行器作为“后端”而不是创建一个全新的操作系统线程?

有几个用例说明我们为什么要这样做:

  • 该应用程序可能已经有一个线程池,例如后台任务,与 我们希望重用的设定优先级等。
  • 类似地,我们可能会传入一个不仅仅是普通线程池的 Executor(例如,延迟执行以备后用,测量执行时间等)
    • 其中的一个子集正在通过 MoreExecutors.directExecutor() 进行测试(以便 Futures 等立即解析)。

编辑:添加了上面的例子

最佳答案

这样的零线程执行器称为 SerialExecutor,在 java.util.concurrent.Executor 的 java 文档中有描述。然而,它有一个小缺点:对于每个提交的 Runnable,它都会创建一个包装器对象。 My own implementation不会创建额外的对象。

关于Java:另一个多线程执行器中的单线程子执行器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43284210/

相关文章:

java - 在 ColdFusion 中传递 Java 对象

java - @Value注解区分类和bean

java - Swing 线程: Event dispatch Thread

c++ - 多线程同步

java - 我可以在 HQL 查询中选择 null 作为列值吗?

java - 无效定义异常 : No serializer found for inner class

c++ - 多线程软件的测试方法

c++ - 如何从 _beginthread 线程返回一个值

Ruby运行两个进程,输出结果到终端,安全结束

java - 如何在 Java 准备语句中打印绑定(bind)变量。