要避免重复提交,可以使用一个计数器来设置序号,并在每次提交任务之前检查计数器的值。下面是一个示例代码:

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

public class TaskScheduler {
    private ScheduledExecutorService executorService;
    private AtomicInteger counter;

    public TaskScheduler() {
        executorService = Executors.newScheduledThreadPool(1);
        counter = new AtomicInteger(0);
    }

    public void scheduleTask(Runnable task, long delay, TimeUnit unit) {
        int currentCount = counter.getAndIncrement();
        executorService.schedule(() -> {
            // 执行任务
            task.run();
            // 任务完成后将计数器减一
            counter.decrementAndGet();
        }, delay, unit);
    }

    public void shutdown() {
        executorService.shutdown();
    }
}

在上面的示例中,我们使用 AtomicInteger 类来实现计数器,并使用 getAndIncrement 方法来获取当前计数器的值,并将计数器的值加一。在提交任务时,我们首先获取当前计数器的值,然后将任务提交给 ScheduledExecutorService 去执行。任务执行完毕后,我们再将计数器的值减一。

这样可以确保每次提交的任务都有一个唯一的序号,并且可以避免重复提交。

java ScheduledExecutorService 设置序号 避免重复提交

原文地址: http://www.cveoy.top/t/topic/imJy 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录