优化处理,避免任务重叠问题

异常处理
This commit is contained in:
2025-03-12 16:02:57 +08:00
parent 6d3a1dd735
commit 11713e9b68

View File

@@ -44,40 +44,43 @@ public class AutoAccessTimer implements ApplicationRunner {
if (CollUtil.isNotEmpty(list)) {
ExecutorService executor = Executors.newFixedThreadPool(10);
// 将任务平均分配给10个子列表
List<List<CsEquipmentDeliveryPO>> subLists = new ArrayList<>();
int partitionSize = list.size() / 10;
for (int i = 0; i < 10; i++) {
int start = i * partitionSize;
int end = (i == 9) ? list.size() : start + partitionSize;
subLists.add(list.subList(start, end));
}
List<List<CsEquipmentDeliveryPO>> subLists = CollUtil.split(list, 10);
// List<List<CsEquipmentDeliveryPO>> subLists = new ArrayList<>();
// int partitionSize = list.size() / 10;
// for (int i = 0; i < 10; i++) {
// int start = i * partitionSize;
// int end = (i == 9) ? list.size() : start + partitionSize;
// subLists.add(list.subList(start, end));
// }
// 创建一个ExecutorService来处理这些任务
List<Future<Void>> futures = new ArrayList<>();
// 提交任务给线程池执行
for (int i = 0; i < 10; i++) {
int index = i;
futures.add(executor.submit(new Callable<Void>() {
@Override
public Void call() {
futures.add(executor.submit(() -> {
accessDev(subLists.get(index));
return null;
}
}));
}
// 等待所有任务完成
for (Future<Void> future : futures) {
try {
future.get();
} catch (InterruptedException | ExecutionException e) {
throw new RuntimeException(e);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
log.error("任务被中断", e);
} catch (ExecutionException e) {
log.error("任务执行异常", e.getCause());
}
}
// 关闭ExecutorService
executor.shutdown();
}
};
//第一次执行的时间为120s然后每隔120s执行一次
scheduler.scheduleAtFixedRate(task,AUTO_TIME,AUTO_TIME,TimeUnit.SECONDS);
//第一次执行的时间为120s然后在前一个任务执行完毕后,等待120s执行下一个任务
scheduler.scheduleWithFixedDelay(task, AUTO_TIME, AUTO_TIME, TimeUnit.SECONDS);
}
public void accessDev(List<CsEquipmentDeliveryPO> list) {