在某些情况发生后停止线程 ScheduledThreadPoolExecutor

Stop a thread ScheduledThreadPoolExecutor after some condition occure

我想要一些线程池,运行每隔一段固定的时间执行一些任务(这个线程池一直在获取任务)。每个任务调用一些 API 来获取一些值,该值可以为空。仅当返回值为 null 时,我才希望任务再次 运行 (在固定时间后)。否则,我不希望此任务再次 运行。有什么办法可以实现吗? 我唯一想到的是使用 ScheduledThreadPoolExecutor 并从内部终止特定线程,但我没有找到这样做的方法,而且我不确定这是一个好习惯。

谢谢!

您可以逐个安排任务,并在安排下一个任务之前检查您的状态:

public class Solver {

    final long delay = 500L;

    String getSomeValue() {
        if (Math.random() < 0.8) return "not-null";
        return null;
    }

    void init() {
        ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(8);
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                long time = System.currentTimeMillis();
                String value = getSomeValue();
                System.out.println("" + value + " " + System.currentTimeMillis());
                if (value == null) {
                    executor.schedule(this, delay - (System.currentTimeMillis() - time), TimeUnit.MILLISECONDS);
                }
            }
        };
        executor.schedule(runnable, delay, TimeUnit.MILLISECONDS);
    }

    public static void main(String[] args) {
        new Solver().init();
    }

}