我正在开发一个计算各种数学函数的java应用程序。 这是场景, 我有M个可运行的任务(每个任务用于计算各种问题,例如一个解决二次方程,另一个解决指数函数,类似的事情)。 这些M 个可运行程序必须每 N 分钟执行一次。这些可运行程序可以顺序执行,不一定以并行方式执行。 我不允许创建多个线程。
我可以使用ScheduledExecutorService定期运行任务。根据 Javadoc,只有一个可运行对象可以与 ScheduledExecutorService 一起使用。 有像 invokeAll(...) 这样的方法,它允许我们提供可运行的集合,但这些方法不提供调度选项。
在浏览互联网时我发现,使用Thread.sleep()并不是开发应用程序的好方法。
有什么建议吗?
最佳答案
您可以创建仅包含一个线程来运行作业的 ExecutorService
:
ExecutorService executorService = Executors.newSingleThreadExecutor();
当您使用 invokeAll
方法向此服务提交多个作业时,它将使用单个 Thread
实例按顺序运行它们。
如果您想使用 ScheduledExecutorService
每 N 分钟运行一次作业,您可以切换到
ScheduledExecutorService scheduledExecutorService =
Executors.newSingleThreadScheduledExecutor();
这将为您提供额外的方法来更好地控制您的工作。
如您所见,invokeAll
方法派生自 ExecutorService
,因此它不为您提供调度选项。但这只是一个快捷方式,您可以使用常规循环来调度多个 Runnable
实例:
for (Runnable job : allJobs) {
scheduledExecutorService.scheduleAtFixedRate(job, 0L, N, TimeUnit.MINUTES);
}
关于java - 如何在单线程中使用多个可运行接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22177569/