gpt4 book ai didi

java - 在 Java 中安排周期性任务,避免在必要时创建新线程(如 CachedThreadPool)

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:34:46 25 4
gpt4 key购买 nike

我有许多任务,对于大多数任务,我想以不同的速率定期执行。不过,有些任务可能会安排同时执行。此外,一个任务可能需要在另一个任务当前正在执行时开始执行。

我还想通过为每个任务设置一个对象来自定义每个任务,任务在执行时将在该对象上运行。

通常,任务将在 2 到 30 分钟的时间内执行,大约需要 4-5 秒,有时执行时长达 30 秒。

我发现 Executors.newSingleThreadedScheduledExecutor(ThreadFactory) 几乎正是我想要的,只是如果一个新任务恰好被安排执行而另一个任务已经在执行,它可能会给我带来问题.这是因为 Executor 由单个执行线程支持。

另一种方法是使用 Executors.newScheduledThreadPool(corePoolSize, ThreadFactory),但这需要我在池中创建多个线程。我想避免在必要时创建线程,例如,如果我有两个或多个任务由于执行计划冲突而恰好需要并行执行。

对于上述情况,Executors.newCachedThreadPool(ThreadFactory) 似乎可以执行我想要的操作,但我无法安排我的任务。我认为缓存和计划执行程序的组合是最好的,但我无法在 Java 中找到类似的东西。

您认为实现上述目标的最佳方式是什么?

最佳答案

不是 ScheduledThreadPoolExecutor.ScheduledThreadPoolExecutor(int) :

ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(0);

你需要什么? 0corePoolSize:

corePoolSize - the number of threads to keep in the pool, even if they are idle, unless allowCoreThreadTimeOut is set

关于java - 在 Java 中安排周期性任务,避免在必要时创建新线程(如 CachedThreadPool),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12723001/

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