暂停执行 Runnable and/or 将其移动到另一个线程

Pause executing Runnable and/or move it to another Thread

我想写一个能够处理Runnables的线程池。这些runnables的执行时间是不可预测的,但响应度应该尽可能高。为了实现这一点,我想监视是否有需要很长时间才能执行的 Runnable。这些 Runnable 被认为对于响应性不如其他 Runnable 重要,所以如果有这样的情况,我希望能够暂停它们,以便在线程上执行另一个更短的 Runnable,在此之前和之后执行更高级的 Runnable恢复持续时间更长的 Runnable 的执行。 是否可以暂停一个 Runnable,并在 Java 中保存它的当前状态,这样我就可以实现这个?

我会让 OS 担心线程调度......它会比你能做的更好(它比更高级别更了解正在发生的事情)程序可以)

这是来自开源项目(非常流行的 OpenFire 项目)的任务引擎的一个很好的例子

https://github.com/igniterealtime/Openfire/blob/master/src/java/org/jivesoftware/util/TaskEngine.java

此引擎将允许您安排具有各种延迟的任务和执行长 运行 任务的其他控件。在内部,它使用 ExecutorService 和可用线程池,您的不同任务将在其中执行。

感谢您的建议,我找到了替代解决方案。我将编写自己的线程池,其中包含一个活动池,其中包含有限数量的并行线程,这些线程将执行所有传入的任务。如果这些线程开始用这些任务阻塞池,则此线程将前进到另一个池,该池由需要执行更长时间任务的所有线程组成。这样,所有快速操作都将保留在线程池中,而更高级的任务将获得自己的线程。