java ScheduledExecutorService 设置序号 避免重复提交
要避免重复提交,可以使用一个计数器来设置序号,并在每次提交任务之前检查计数器的值。下面是一个示例代码:
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 去执行。任务执行完毕后,我们再将计数器的值减一。
这样可以确保每次提交的任务都有一个唯一的序号,并且可以避免重复提交。
原文地址: http://www.cveoy.top/t/topic/imJy 著作权归作者所有。请勿转载和采集!