Browse Source

7.28 日常开发 - 启用线程池

Mechrevo 1 year ago
parent
commit
4eefac67d4

+ 34 - 3
sp-service/level-one-server/src/main/java/com/pj/tb_goods_transit/MethodGoodsTransitService.java

@@ -4,6 +4,7 @@ import com.pj.current.dto.APPLoginUserInfo;
 import com.pj.enummj.DeleteStatus;
 import com.pj.enummj.EnterpriseConfirm;
 import com.pj.rabbitmq.config.RabbitMqConfig;
+import com.pj.tb_enterprise.TbEnterprise;
 import com.pj.tb_goods.TbGoods;
 import com.pj.tb_goods_type.TbGoodsTypeService;
 import com.pj.tb_order.TbOrder;
@@ -39,13 +40,43 @@ public class MethodGoodsTransitService {
     @Autowired
     private AmqpTemplate amqpTemplate;
 
+
+
     /**
      * 给边民组组员发送短信通知
      */
     public void sendSms(List<TbPeople> peopleIdList){
-        peopleIdList.forEach(item -> {
-            amqpTemplate.convertAndSend(RabbitMqConfig.PEOPLE_REVEIVE_MESSAGE_MQ,item);
-        });
+
+        //获取当前电脑核心数
+        int processors = Runtime.getRuntime().availableProcessors() / 2;
+        //创建固定线程
+        ExecutorService executorService = Executors.newFixedThreadPool(processors);
+        //执行任务
+        //每次执行100条
+        int bai = 30;
+        //计算需要创建的线程数
+        int threads = (int) Math.ceil((double) peopleIdList.size() / bai);
+        //创建计数器
+        int count = 0;
+        for (int i = 0; i < threads; i++) {
+            int start = i * bai;
+            int end = Math.min(start + bai,peopleIdList.size());
+            //截取集合数量
+            List<TbPeople> enterpriseList = peopleIdList.subList(start, end);
+            //多线程执行任务
+            executorService.submit(() -> {
+                enterpriseList.forEach(item -> {
+                    //todo: 给边民发送短信
+
+                });
+            });
+            //计数
+            count += enterpriseList.size();
+            System.out.println("发送的短信数量为: " + count + " 条。");
+
+        }
+        //关闭多线程
+        executorService.shutdown();
     }