From 11713e9b68945da546deafec0d97c4b7a09e7b42 Mon Sep 17 00:00:00 2001 From: hongawen <83944980@qq.com> Date: Wed, 12 Mar 2025 16:02:57 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=A4=84=E7=90=86=EF=BC=8C?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E4=BB=BB=E5=8A=A1=E9=87=8D=E5=8F=A0=E9=97=AE?= =?UTF-8?q?=E9=A2=98=20=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../njcn/access/runner/AutoAccessTimer.java | 45 ++++++++++--------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/runner/AutoAccessTimer.java b/iot-access/access-boot/src/main/java/com/njcn/access/runner/AutoAccessTimer.java index 3b68c14..2c1a305 100644 --- a/iot-access/access-boot/src/main/java/com/njcn/access/runner/AutoAccessTimer.java +++ b/iot-access/access-boot/src/main/java/com/njcn/access/runner/AutoAccessTimer.java @@ -44,50 +44,53 @@ public class AutoAccessTimer implements ApplicationRunner { if (CollUtil.isNotEmpty(list)) { ExecutorService executor = Executors.newFixedThreadPool(10); // 将任务平均分配给10个子列表 - List> 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> subLists = CollUtil.split(list, 10); +// List> 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> futures = new ArrayList<>(); // 提交任务给线程池执行 for (int i = 0; i < 10; i++) { int index = i; - futures.add(executor.submit(new Callable() { - @Override - public Void call() { - accessDev(subLists.get(index)); - return null; - } + futures.add(executor.submit(() -> { + accessDev(subLists.get(index)); + return null; })); } + // 等待所有任务完成 for (Future 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 list) { if (CollUtil.isNotEmpty(list)) { try { - list.forEach(item->{ + list.forEach(item -> { System.out.println(Thread.currentThread().getName() + ": auto : nDid : " + item.getNdid()); //判断设备类型 便携式设备需要特殊处理 未注册的要先注册、再接入;已注册的直接重新接入 String code = dictTreeFeignClient.queryById(item.getDevType()).getData().getCode(); - if (Objects.equals(code, DicDataEnum.PORTABLE.getCode()) && Objects.equals(item.getStatus(),1)) { + if (Objects.equals(code, DicDataEnum.PORTABLE.getCode()) && Objects.equals(item.getStatus(), 1)) { //csDeviceService.wlDevRegister(item.getNdid()); log.info("请先手动注册、接入"); } else { @@ -95,9 +98,9 @@ public class AutoAccessTimer implements ApplicationRunner { if (Objects.isNull(version)) { version = "V1"; } - csDeviceService.autoAccess(item.getNdid(),version,1); + csDeviceService.autoAccess(item.getNdid(), version, 1); } - redisUtil.saveByKey(AppRedisKey.DEVICE_MID + item.getNdid(),1); + redisUtil.saveByKey(AppRedisKey.DEVICE_MID + item.getNdid(), 1); }); } catch (Exception e) { log.error(e.getMessage());