gpt4 book ai didi

java - ScheduledExecutorService - 忽略已经运行的可运行对象

转载 作者:行者123 更新时间:2023-12-02 04:25:52 25 4
gpt4 key购买 nike

我正在使用预定执行程序服务

私有(private) ScheduledExecutorService 池 = new ScheduledThreadPoolExecutor(1);

以固定速率运行可运行程序

pool.scheduleAtFixedRate(new CoolRunnable(), 10, 10, TimeUnit.MILLISECONDS);

这个线程池等待前一个执行完成,但我希望它每 10 毫秒运行一次可运行对象,无论前一个执行是否完成。

我怎样才能做到这一点?

编辑:修复了用连接池替换MySQL连接的问题。普通的连接方法是同步的,这就是可运行对象必须相互等待的原因。

最佳答案

为此,您需要每 10 秒向 ExecutorService 提交一个任务。这个 ExecutorService 负责运行任务:

ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
ExecutorService workers = Executors.newCachedThreadPool();

scheduler.scheduleAtFixedRate(new Runnable {
@Override
public void run() {
workers.submit(new CoolRunnable());
}
}, 10, TimeUnit.SECONDS);

如果旧线程仍在工作,则使用cachedThreadPool将创建新线程。这样做要小心:如果任务运行时间很长,每 10 秒添加一个新任务可能会创建大量并发线程。

关于java - ScheduledExecutorService - 忽略已经运行的可运行对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32188597/

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