[英]ScheduledExecutorService - Ignore already running runnable
我正在使用预定的执行器服务
private ScheduledExecutorService pool = 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秒钟添加一个新任务可能会创建大量并发线程,如果这些任务花费更长的时间才能运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.