ScheduledExecutorService - 忽略已经运行的runnable

时间:2015-08-24 17:52:59

标签: java threadpool runnable scheduledexecutorservice

我正在使用预定的执行服务

private ScheduledExecutorService pool = new ScheduledThreadPoolExecutor(1);

以固定费率运行runnable

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

此线程池等待上一次执行完成,但我希望它每10毫秒运行一次runnable,无论之前是否完成。

我该怎么做?

编辑: 修复了用连接池替换MySQL连接的问题。正常的连接方法是同步的,这就是为什么runnables必须等待彼此。

1 个答案:

答案 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秒添加一个新任务可能会创建大量并发线程。

相关问题