gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:11:56 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com