From d8abc753413c6145b4592e3361d48a792cf0b336 Mon Sep 17 00:00:00 2001 From: mh Date: Fri, 1 Mar 2024 17:55:23 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=88=86=E6=89=B9=E6=AC=A1=E6=89=A7?= =?UTF-8?q?=E8=A1=8C=E7=BA=BF=E7=A8=8B=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mh/user/job/DealDataJob.java | 5 +- .../test/java/com/mh/user/TestJwtUtils.java | 122 +++++++++++++----- 2 files changed, 93 insertions(+), 34 deletions(-) diff --git a/user-service/src/main/java/com/mh/user/job/DealDataJob.java b/user-service/src/main/java/com/mh/user/job/DealDataJob.java index 4a980c5..561f819 100644 --- a/user-service/src/main/java/com/mh/user/job/DealDataJob.java +++ b/user-service/src/main/java/com/mh/user/job/DealDataJob.java @@ -93,18 +93,21 @@ public class DealDataJob { // 分组data_com Map> dataComMap = deviceParamsByType.stream().collect(Collectors.groupingBy(DeviceCodeParamEntity::getDataCom)); int batchSize = 10; // 定义一个批次大小 + int index = 0; for (int k = 0; k < dataComMap.size(); ) { CountDownLatch countDownLatch = new CountDownLatch(Math.min(batchSize, dataComMap.size() - k)); + index = k; for (int j = 0; j < Math.min(batchSize, dataComMap.size() - k); j++) { if (Constant.WEB_FLAG) { break; } // 获取data_com口 - String dataCom = dataComMap.keySet().toArray(new String[0])[j]; + String dataCom = dataComMap.keySet().toArray(new String[0])[index]; SerialPortThread myThread = new SerialPortThread(); myThread.setName(threadName, dataCom.toLowerCase().replace("com", ""), countDownLatch); Thread thread = new Thread(myThread); comThreadPool.execute(thread); + index++; } // 等待执行完成 countDownLatch.await(); diff --git a/user-service/src/test/java/com/mh/user/TestJwtUtils.java b/user-service/src/test/java/com/mh/user/TestJwtUtils.java index e26a303..60caaca 100644 --- a/user-service/src/test/java/com/mh/user/TestJwtUtils.java +++ b/user-service/src/test/java/com/mh/user/TestJwtUtils.java @@ -1,10 +1,14 @@ package com.mh.user; import com.alibaba.fastjson2.JSONObject; +import com.mh.user.constants.Constant; import com.mh.user.model.SysUser; +import com.mh.user.serialport.SerialPortThread; +import com.mh.user.utils.ComThreadPoolService; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; +import org.checkerframework.checker.units.qual.K; import sun.security.provider.MD5; import java.math.BigInteger; @@ -13,6 +17,8 @@ import java.security.NoSuchAlgorithmException; import java.util.Date; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ThreadPoolExecutor; /** * @author ljf @@ -131,6 +137,7 @@ public class TestJwtUtils { // // } + static ThreadPoolExecutor comThreadPool = ComThreadPoolService.getInstance(); /** * eyJhbGciOiJIUzI1NiJ9. @@ -139,41 +146,90 @@ public class TestJwtUtils { * * @param args */ - - public static void main(String[] args) { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("no", "abc"); - jsonObject.put("model", 1); - jsonObject.put("scheme", 202); - String inputString = "85b5cebb6132a189570d51bf5e34d93c"+jsonObject.toJSONString(); - - try { - // 获取MessageDigest实例用于MD5算法 - MessageDigest md = MessageDigest.getInstance("MD5"); - - // 将输入字符串转换为字节数组并进行更新 - byte[] messageBytes = inputString.getBytes(); - md.update(messageBytes); - - // 完成哈希计算并获取结果字节数组 - byte[] digestBytes = md.digest(); - - // 将字节数组转换为大写的十六进制字符串表示形式 - BigInteger no = new BigInteger(1, digestBytes); - String hashtext = no.toString(16); - - // 如果生成的十六进制字符串长度小于32,则前面补0以达到32位 - while (hashtext.length() < 32) { - hashtext = "0" + hashtext; + public static void main(String[] args) throws InterruptedException { +// JSONObject jsonObject = new JSONObject(); +// jsonObject.put("no", "abc"); +// jsonObject.put("model", 1); +// jsonObject.put("scheme", 202); +// String inputString = "85b5cebb6132a189570d51bf5e34d93c"+jsonObject.toJSONString(); +// +// try { +// // 获取MessageDigest实例用于MD5算法 +// MessageDigest md = MessageDigest.getInstance("MD5"); +// +// // 将输入字符串转换为字节数组并进行更新 +// byte[] messageBytes = inputString.getBytes(); +// md.update(messageBytes); +// +// // 完成哈希计算并获取结果字节数组 +// byte[] digestBytes = md.digest(); +// +// // 将字节数组转换为大写的十六进制字符串表示形式 +// BigInteger no = new BigInteger(1, digestBytes); +// String hashtext = no.toString(16); +// +// // 如果生成的十六进制字符串长度小于32,则前面补0以达到32位 +// while (hashtext.length() < 32) { +// hashtext = "0" + hashtext; +// } +// +// System.out.println("MD5 Hash: " + hashtext); +// +// } catch (NoSuchAlgorithmException e) { +// // 处理MD5算法不可用的情况 +// e.printStackTrace(); +// } + for (int a = 0; a < 100; a++) { + if (comThreadPool.isShutdown()) { + comThreadPool = ComThreadPoolService.getInstance(); } - - System.out.println("MD5 Hash: " + hashtext); - - } catch (NoSuchAlgorithmException e) { - // 处理MD5算法不可用的情况 - e.printStackTrace(); + Map dataComMap = new HashMap<>(); + dataComMap.put("1", "1"); + dataComMap.put("2", "1"); + dataComMap.put("3", "1"); + dataComMap.put("4", "1"); + dataComMap.put("5", "1"); + dataComMap.put("6", "1"); + dataComMap.put("7", "1"); + dataComMap.put("8", "1"); + dataComMap.put("9", "1"); + dataComMap.put("10", "1"); + dataComMap.put("11", "1"); + dataComMap.put("12", "1"); + int batchSize = 5; // 定义一个批次大小 + int index = 0; + for (int k = 0; k < dataComMap.size(); ) { + System.out.println("第几轮==>" + k); + CountDownLatch countDownLatch = new CountDownLatch(Math.min(batchSize, dataComMap.size() - k)); + index = k; + for (int j = 0; j < Math.min(batchSize, dataComMap.size() - k); j++) { + if (Constant.WEB_FLAG) { + break; + } + // 获取data_com口 + String dataCom = dataComMap.keySet().toArray(new String[0])[index]; + index++; + CountDownLatch finalCountDownLatch = countDownLatch; + Thread thread = new Thread(() -> { + finalCountDownLatch.countDown(); + System.out.println(Thread.currentThread() + ": " + dataCom); + }); + comThreadPool.execute(thread); + } + // 等待执行完成 + countDownLatch.await(); + // 释放资源 + countDownLatch = null; + // 检查是否需要继续创建新的线程(未达到数据总数量且WEB_FLAG为false) + if (k + batchSize < dataComMap.size() && !Constant.WEB_FLAG) { + k += batchSize; + } else { + break; + } + } + System.out.println("结束==》"+a); + comThreadPool.shutdown(); } - } }