繁体   English   中英

ScheduledExecutorService-忽略已运行的可运行文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM