java - 暂停执行 Runnable 和/或将其移动到另一个线程

标签 java multithreading threadpool runnable

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

最佳答案

我会让操作系统担心线程调度...它会比你能够做得更好(它比更高级别的程序更了解正在发生的事情)

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

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

该引擎将允许您安排具有各种延迟的任务以及用于执行长时间运行的任务的其他控件。在内部,它使用 ExecutorService 和一个可用线程池,您的不同任务将在这些线程上执行。

关于java - 暂停执行 Runnable 和/或将其移动到另一个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27826123/

相关文章:

c# - ThreadPool 线程执行 I/O 操作 - 线程可以在等待时重用吗?

java - 在 android 中膨胀 fragment 时出错

java - 如何通过Java驱动正确连接到Atlas M0 (Free Tier) 集群?

java - Java中如何正确使用volatile

java - 在 Java 中检查新 XML 文件的最佳方法

c# - Thread.Abort() 导致应用程序被杀死

Java Executors 和每线程(不是每工作单元)对象?

c# - 使用线程池复制 100.000 个文件

java - java 11 支持安卓吗?

java - 使用java向keycloak用户添加客户端角色