我正在使用预定的执行服务
private ScheduledExecutorService pool = new ScheduledThreadPoolExecutor(1);
以固定费率运行runnable
pool.scheduleAtFixedRate(new CoolRunnable(), 10, 10, TimeUnit.MILLISECONDS);
此线程池等待上一次执行完成,但我希望它每10毫秒运行一次runnable,无论之前是否完成。
我该怎么做?
编辑: 修复了用连接池替换MySQL连接的问题。正常的连接方法是同步的,这就是为什么runnables必须等待彼此。
答案 0 :(得分:2)
为此,您需要每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秒添加一个新任务可能会创建大量并发线程。