java—在提交给executor服务的任务之间有延迟

fnx2tebb  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(689)

我使用的是springboot,我有一个用例,我想将列表中的每个元素提交给executor服务(threadpool size=4)。但是在每一个需要处理的元素之间,我想要1秒的延迟。
sleep(1000)不起作用,因为一旦一个线程进入睡眠状态,executor就会启动另一个线程。

list().forEach(key -> {
            executorService.submit(new Runnable() {
                @Override
                public void run() {
                    process(key);
                }
            });
        });

edit:这是我的process()方法,我在最后尝试使用sleep,但没有成功。

private void process(long key) {
        try {
            //processing key

        } catch (SystemException e) {
            // Exception handling
        }
        Thread.sleep(1000);
    }
vwhgwdsa

vwhgwdsa1#

既然您希望它们在另一个线程上按顺序执行,为什么不直接使用 ScheduledExecutorService 然后在名单上投票?

Iterator<Pojo> iterator = list().iterator();

Future<Pojo> future = executorService.schedule(() -> {
    if (!iterator.hasNext()) {
        future.cancel(false);
        return;
    }
    Pojo pojo = iterator.next();

    iterator.remove();

    process(pojo.key());
}

相关问题