Browse Source

在创建线程后关闭线程池

lwx_dev
erdanergou 3 years ago
parent
commit
dd8db5ff7e
  1. 27
      src/main/java/com/dreamchaser/depository_manage/config/PublicConfig.java
  2. 37
      src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java
  3. 8
      src/main/java/com/dreamchaser/depository_manage/service/impl/CompanyServiceImpl.java
  4. 4
      src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java
  5. 8
      src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java
  6. 9
      src/main/java/com/dreamchaser/depository_manage/service/impl/ExcelServiceImpl.java
  7. 4
      src/main/java/com/dreamchaser/depository_manage/service/impl/GroupServiceImpl.java
  8. 10
      src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java
  9. 4
      src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialTypeServiceImpl.java

27
src/main/java/com/dreamchaser/depository_manage/config/PublicConfig.java

@ -6,10 +6,14 @@ import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.entity.UserByPort; import com.dreamchaser.depository_manage.entity.UserByPort;
import com.dreamchaser.depository_manage.utils.HttpUtils; import com.dreamchaser.depository_manage.utils.HttpUtils;
import lombok.Data; import lombok.Data;
import lombok.extern.log4j.Log4j;
import lombok.extern.log4j.Log4j2;
import org.apache.http.protocol.HTTP; import org.apache.http.protocol.HTTP;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;
/** /**
* 用于对接HR系统 * 用于对接HR系统
@ -147,4 +151,27 @@ public class PublicConfig {
} }
return userByPort; return userByPort;
} }
/**
* 用于关闭线程池
* @param exs 待关闭的线程池
*/
public static void closeThreadPool(ExecutorService exs){
exs.shutdown(); // 禁止提交新任务
// 设定最大重试次数
try {
// 等待 60 s
if (!exs.awaitTermination(60, TimeUnit.SECONDS)) {
// 调用 shutdownNow 取消正在执行的任务
exs.shutdownNow();
// 再次等待 60 s,如果还未结束,可以再次尝试,或者直接放弃
if (!exs.awaitTermination(60, TimeUnit.SECONDS))
System.err.println("线程池任务未正常执行结束");
}
} catch (InterruptedException ie) {
// 重新调用 shutdownNow
exs.shutdownNow();
}
}
} }

37
src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java

@ -402,17 +402,13 @@ public class DepositoryController {
Map<String, Object> depository_data = new HashMap<>(); Map<String, Object> depository_data = new HashMap<>();
depository_data.put("week", show_weekday); depository_data.put("week", show_weekday);
if ("0".equals(type)) {
int threadSize = depositoryAllNameAndId.size(); int threadSize = depositoryAllNameAndId.size();
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize)); ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 结果集 // 结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>(); List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService // 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs); CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
if ("0".equals(type)) {
// 获取当前各仓库的库存数 // 获取当前各仓库的库存数
List<InventoryByDname> toDayInventoryByDName = depositoryService.getToDayInventoryByDName(); List<InventoryByDname> toDayInventoryByDName = depositoryService.getToDayInventoryByDName();
while (it.hasNext()) { while (it.hasNext()) {
@ -433,15 +429,6 @@ public class DepositoryController {
} }
depository_data.put("data", show_data); depository_data.put("data", show_data);
} else { } else {
// 定义线程
int threadSize = depositoryAllNameAndId.size();
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
// 每天各仓库入库数目 // 每天各仓库入库数目
while (it.hasNext()) { while (it.hasNext()) {
Object next = it.next(); Object next = it.next();
@ -462,6 +449,8 @@ public class DepositoryController {
depository_data.put("data", show_data); depository_data.put("data", show_data);
} }
// 关闭线程池
PublicConfig.closeThreadPool(exs);
return depository_data; return depository_data;
} }
@ -610,7 +599,8 @@ public class DepositoryController {
} }
} else { }
else {
// 获取本周至今仓库的入/出库数量 // 获取本周至今仓库的入/出库数量
Future<Object> futureForBarChartData = completionService.submit(new distributeTasks(depositoryAllNameAndId, type, 1, userByPort, depositoryName)); Future<Object> futureForBarChartData = completionService.submit(new distributeTasks(depositoryAllNameAndId, type, 1, userByPort, depositoryName));
@ -638,6 +628,8 @@ public class DepositoryController {
} }
} }
// 关闭线程池
PublicConfig.closeThreadPool(exs);
// 构造对应格式 // 构造对应格式
depository_data.put("week", show_weekday); depository_data.put("week", show_weekday);
depository_data.put("lineChartData", lineChartData); depository_data.put("lineChartData", lineChartData);
@ -710,6 +702,9 @@ public class DepositoryController {
show_data.putAll((Map<?, ?>) result); show_data.putAll((Map<?, ?>) result);
} }
// 关闭线程池
PublicConfig.closeThreadPool(exs);
return show_data; return show_data;
} }
@ -744,6 +739,9 @@ public class DepositoryController {
} }
result.add(obj); result.add(obj);
} }
// 关闭线程池
PublicConfig.closeThreadPool(exs);
return result; return result;
} }
// 用于获取旭日图数据 // 用于获取旭日图数据
@ -835,6 +833,8 @@ public class DepositoryController {
stringObjectMap.put("itemStyle", itemStyle); stringObjectMap.put("itemStyle", itemStyle);
result.add(stringObjectMap); result.add(stringObjectMap);
} }
// 关闭线程池
PublicConfig.closeThreadPool(exs);
return result; return result;
} }
@ -1252,6 +1252,8 @@ public class DepositoryController {
} }
result.putAll((Map<?, ?>) obj); result.putAll((Map<?, ?>) obj);
} }
// 关闭线程池
PublicConfig.closeThreadPool(exs);
return result; return result;
} }
@ -1331,6 +1333,9 @@ public class DepositoryController {
} }
show_data.putAll((Map<?, ?>) result); show_data.putAll((Map<?, ?>) result);
} }
// 关闭线程池
PublicConfig.closeThreadPool(exs);
} }
@ -1729,6 +1734,8 @@ public class DepositoryController {
result.add(obj); result.add(obj);
sum += ObjectFormatUtil.toDouble(((Map<String, Object>) obj).get("value")); sum += ObjectFormatUtil.toDouble(((Map<String, Object>) obj).get("value"));
} }
// 关闭线程池
PublicConfig.closeThreadPool(exs);
map.put("children", result); map.put("children", result);
map.put("name", map.get("month")); map.put("name", map.get("month"));
map.remove("month"); map.remove("month");

8
src/main/java/com/dreamchaser/depository_manage/service/impl/CompanyServiceImpl.java

@ -182,6 +182,8 @@ public class CompanyServiceImpl implements CompanyService {
} }
list.add(result); list.add(result);
} }
// 关闭线程池
PublicConfig.closeThreadPool(exs);
return list; return list;
} }
@ -251,6 +253,8 @@ public class CompanyServiceImpl implements CompanyService {
} }
list.addAll((Collection<?>) result); list.addAll((Collection<?>) result);
} }
// 关闭线程池
PublicConfig.closeThreadPool(exs);
return list; return list;
} }
@ -307,6 +311,8 @@ public class CompanyServiceImpl implements CompanyService {
} }
list.add( result); list.add( result);
} }
// 关闭线程池
PublicConfig.closeThreadPool(exs);
return list; return list;
} }
@ -474,6 +480,8 @@ public class CompanyServiceImpl implements CompanyService {
} }
list.add(result); list.add(result);
} }
// 关闭线程池
PublicConfig.closeThreadPool(exs);
return list; return list;
} }
} }

4
src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java

@ -549,6 +549,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
countForToday += ObjectFormatUtil.toDouble(((Map<String, Object>) o).get("count")); countForToday += ObjectFormatUtil.toDouble(((Map<String, Object>) o).get("count"));
priceForToday += ObjectFormatUtil.toDouble(((Map<String, Object>) o).get("price")); priceForToday += ObjectFormatUtil.toDouble(((Map<String, Object>) o).get("price"));
} }
// 关闭线程池
PublicConfig.closeThreadPool(exsForToday);
} }
if (yesterdaySize > 0) { if (yesterdaySize > 0) {
// 定义线程用于计算昨天的记录 // 定义线程用于计算昨天的记录
@ -577,6 +579,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
countForYesterday += ObjectFormatUtil.toDouble(((Map<String, Object>) o).get("count")); countForYesterday += ObjectFormatUtil.toDouble(((Map<String, Object>) o).get("count"));
priceForYesterday += ObjectFormatUtil.toDouble(((Map<String, Object>) o).get("price")); priceForYesterday += ObjectFormatUtil.toDouble(((Map<String, Object>) o).get("price"));
} }
// 关闭线程池
PublicConfig.closeThreadPool(exsForYesterday);
} }
// 设置今天的额度 // 设置今天的额度
result.put("price", priceForToday); result.put("price", priceForToday);

8
src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java

@ -529,7 +529,8 @@ public class DepositoryServiceImpl implements DepositoryService {
} }
list.addAll((Collection<?>) result); list.addAll((Collection<?>) result);
} }
exs.shutdown(); // 关闭线程池
PublicConfig.closeThreadPool(exs);
// 用于判断当前列表中是否有所有上级 // 用于判断当前列表中是否有所有上级
for (int i = 0; i < list.size(); i++) { for (int i = 0; i < list.size(); i++) {
if (list.get(i) == null) { if (list.get(i) == null) {
@ -943,7 +944,8 @@ public class DepositoryServiceImpl implements DepositoryService {
} }
list.addAll((Collection<?>) result); list.addAll((Collection<?>) result);
} }
exs.shutdown(); // 关闭线程池
PublicConfig.closeThreadPool(exs);
// 用于判断当前列表中是否有所有上级 // 用于判断当前列表中是否有所有上级
return list; return list;
} }
@ -1033,6 +1035,8 @@ public class DepositoryServiceImpl implements DepositoryService {
} }
list.add(result); list.add(result);
} }
// 关闭线程池
PublicConfig.closeThreadPool(exs);
return list; return list;
} }
} }

9
src/main/java/com/dreamchaser/depository_manage/service/impl/ExcelServiceImpl.java

@ -10,6 +10,7 @@ import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.alibaba.excel.write.metadata.fill.FillWrapper; import com.alibaba.excel.write.metadata.fill.FillWrapper;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PublicConfig;
import com.dreamchaser.depository_manage.controller.WebSocketController; import com.dreamchaser.depository_manage.controller.WebSocketController;
import com.dreamchaser.depository_manage.entity.*; import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.mapper.ConstructionUnitMapper; import com.dreamchaser.depository_manage.mapper.ConstructionUnitMapper;
@ -133,7 +134,6 @@ public class ExcelServiceImpl implements ExcelService {
// 定义组合id列表 // 定义组合id列表
List<ExcelInfoForMaterial> excelInfoForMaterialS = new ArrayList<>(); List<ExcelInfoForMaterial> excelInfoForMaterialS = new ArrayList<>();
List<String> dataIndexList = new ArrayList<>(); List<String> dataIndexList = new ArrayList<>();
System.out.println(excelVosForMaterialList.size());
for (int i = 0; i < excelVosForMaterialList.size(); i++) { for (int i = 0; i < excelVosForMaterialList.size(); i++) {
if (((i + 1) % 100) == 0) { // 如果有个开启线程进行处理 if (((i + 1) % 100) == 0) { // 如果有个开启线程进行处理
excelInfoForMaterialS.add(excelVosForMaterialList.get(i)); excelInfoForMaterialS.add(excelVosForMaterialList.get(i));
@ -165,7 +165,10 @@ public class ExcelServiceImpl implements ExcelService {
} }
errMsg.addAll(strings); errMsg.addAll(strings);
} }
// 关闭线程池
PublicConfig.closeThreadPool(exs);
} }
List<ExcelInfoForMaterial> userExcelMaterialInfo = ExcelFileInfoPool.getUserExcelMaterialInfo(userByPort.getNumber()); List<ExcelInfoForMaterial> userExcelMaterialInfo = ExcelFileInfoPool.getUserExcelMaterialInfo(userByPort.getNumber());
if (userExcelMaterialInfo == null) { if (userExcelMaterialInfo == null) {
userExcelMaterialInfo = new ArrayList<>(); userExcelMaterialInfo = new ArrayList<>();
@ -278,6 +281,8 @@ public class ExcelServiceImpl implements ExcelService {
} }
errMsg.addAll(strings); errMsg.addAll(strings);
} }
// 关闭线程池
PublicConfig.closeThreadPool(exs);
} }
List<ExcelInfoByMT> userExcelMaterialTypeInfo = ExcelFileInfoPool.getUserExcelMaterialTypeInfo(userByPort.getNumber()); List<ExcelInfoByMT> userExcelMaterialTypeInfo = ExcelFileInfoPool.getUserExcelMaterialTypeInfo(userByPort.getNumber());
@ -396,6 +401,8 @@ public class ExcelServiceImpl implements ExcelService {
} }
errMsg.addAll(strings); errMsg.addAll(strings);
} }
// 关闭线程池
PublicConfig.closeThreadPool(exs);
} }

4
src/main/java/com/dreamchaser/depository_manage/service/impl/GroupServiceImpl.java

@ -564,6 +564,8 @@ public class GroupServiceImpl implements GroupService {
} }
list.addAll((Collection<?>) result); list.addAll((Collection<?>) result);
} }
// 关闭线程池
PublicConfig.closeThreadPool(exs);
return list; return list;
} }
@ -1294,6 +1296,8 @@ public class GroupServiceImpl implements GroupService {
} }
list.add(result); list.add(result);
} }
// 关闭线程池
PublicConfig.closeThreadPool(exs);
return list; return list;
} }
} }

10
src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java

@ -3,6 +3,7 @@ package com.dreamchaser.depository_manage.service.impl;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PublicConfig;
import com.dreamchaser.depository_manage.entity.*; import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.mapper.*; import com.dreamchaser.depository_manage.mapper.*;
import com.dreamchaser.depository_manage.pojo.InventoryP; import com.dreamchaser.depository_manage.pojo.InventoryP;
@ -2306,6 +2307,8 @@ public class MaterialServiceImpl implements MaterialService {
redisPool.getRedisTemplateByDb(15).opsForList().rightPush("wms_materialTree_result", JSON.toJSONString(result)); redisPool.getRedisTemplateByDb(15).opsForList().rightPush("wms_materialTree_result", JSON.toJSONString(result));
redisPool.getRedisTemplateByDb(15).expire("wms_materialTree_result", DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS); redisPool.getRedisTemplateByDb(15).expire("wms_materialTree_result", DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
} }
// 关闭线程池
PublicConfig.closeThreadPool(exs);
return list; return list;
} }
} }
@ -2350,6 +2353,8 @@ public class MaterialServiceImpl implements MaterialService {
redisPool.getRedisTemplateByDb(15).opsForList().rightPush("wms_materialTree_result", JSON.toJSONString(result)); redisPool.getRedisTemplateByDb(15).opsForList().rightPush("wms_materialTree_result", JSON.toJSONString(result));
redisPool.getRedisTemplateByDb(15).expire("wms_materialTree_result", DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS); redisPool.getRedisTemplateByDb(15).expire("wms_materialTree_result", DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
} }
// 关闭线程池
PublicConfig.closeThreadPool(exs);
} }
@ -2525,7 +2530,10 @@ public class MaterialServiceImpl implements MaterialService {
} }
list.addAll((Collection<?>) result); list.addAll((Collection<?>) result);
} }
// 关闭线程池
PublicConfig.closeThreadPool(exs);
// 进行最终的封装 // 进行最终的封装
return buildTreeForSelectName(list); return buildTreeForSelectName(list);
} }
@ -2955,6 +2963,8 @@ public class MaterialServiceImpl implements MaterialService {
} }
list.add(result); list.add(result);
} }
// 关闭线程池
PublicConfig.closeThreadPool(exs);
return list; return list;
} }

4
src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialTypeServiceImpl.java

@ -2,6 +2,7 @@ package com.dreamchaser.depository_manage.service.impl;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PublicConfig;
import com.dreamchaser.depository_manage.entity.MaterialType; import com.dreamchaser.depository_manage.entity.MaterialType;
import com.dreamchaser.depository_manage.mapper.MaterialTypeMapper; import com.dreamchaser.depository_manage.mapper.MaterialTypeMapper;
import com.dreamchaser.depository_manage.service.MaterialTypeService; import com.dreamchaser.depository_manage.service.MaterialTypeService;
@ -293,7 +294,8 @@ public class MaterialTypeServiceImpl implements MaterialTypeService {
} }
list.addAll((Collection<?>) result); list.addAll((Collection<?>) result);
} }
exs.shutdown(); // 关闭线程池
PublicConfig.closeThreadPool(exs);
// 进行最终的封装 // 进行最终的封装
return list; return list;
} }

Loading…
Cancel
Save