Java 使用 ScheduledExecutorService 实现 for 循环每 10 次暂停 1500 毫秒
使用 ScheduledExecutorService 实现 for 循环每 10 次暂停 1500 毫秒
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ForLoopWithPause {
public static void main(String[] args) {
// 假设 instLists 是一个 List<InstList> 对象
List<InstList> instLists = instListMapper.selectInstListList(list);
// 创建 ScheduledExecutorService
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
// 定义 Runnable 任务
Runnable task = new Runnable() {
int i = 0;
@Override
public void run() {
if (i < instLists.size()) {
// Your code here
System.out.println("Processing: " + i);
// 每 10 次循环后暂停 1500 毫秒
if ((i + 1) % 10 == 0) {
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
i++;
} else {
executor.shutdown();
}
}
};
// 每 1 秒执行一次任务
executor.scheduleAtFixedRate(task, 0, 1, TimeUnit.SECONDS);
}
}
解释:
- 创建 ScheduledExecutorService: 使用
Executors.newSingleThreadScheduledExecutor()创建一个单线程的 ScheduledExecutorService。 - 定义 Runnable 任务: 创建一个 Runnable 任务,在
run()方法中执行循环逻辑。 - 循环逻辑: 在
run()方法中,使用i变量跟踪循环次数。- 每 10 次循环,调用
Thread.sleep(1500)暂停 1500 毫秒。
- 每 10 次循环,调用
- 调度任务: 使用
executor.scheduleAtFixedRate(task, 0, 1, TimeUnit.SECONDS)每 1 秒执行一次任务。
注意:
- 这种方法使用 ScheduledExecutorService 实现定时执行,而不是直接在 for 循环中使用
Thread.sleep(),避免阻塞主线程。 - 由于使用了多线程,请确保您的代码线程安全。
其他选择:
除了 ScheduledExecutorService,您还可以考虑使用以下方法实现类似功能:
- 使用
Thread.sleep()在循环中暂停,但会导致主线程阻塞。 - 使用
Timer或TimerTask,但它们在处理大量任务时效率可能较低。 - 使用
java.util.concurrent.DelayQueue存储延迟任务,然后循环处理。
选择哪种方法取决于您的具体需求和代码复杂度。
原文地址: https://www.cveoy.top/t/topic/bdQo 著作权归作者所有。请勿转载和采集!