Browse Source

在创建线程后关闭线程池

lwx_dev
erdanergou 3 years ago
parent
commit
dd8db5ff7e
  1. 27
      src/main/java/com/dreamchaser/depository_manage/config/PublicConfig.java
  2. 47
      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.utils.HttpUtils;
import lombok.Data;
import lombok.extern.log4j.Log4j;
import lombok.extern.log4j.Log4j2;
import org.apache.http.protocol.HTTP;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;
/**
* 用于对接HR系统
@ -147,4 +151,27 @@ public class PublicConfig {
}
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();
}
}
}

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

@ -402,17 +402,13 @@ public class DepositoryController {
Map<String, Object> depository_data = new HashMap<>();
depository_data.put("week", show_weekday);
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);
if ("0".equals(type)) {
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);
// 获取当前各仓库的库存数
List<InventoryByDname> toDayInventoryByDName = depositoryService.getToDayInventoryByDName();
while (it.hasNext()) {
@ -433,15 +429,6 @@ public class DepositoryController {
}
depository_data.put("data", show_data);
} 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()) {
Object next = it.next();
@ -462,6 +449,8 @@ public class DepositoryController {
depository_data.put("data", show_data);
}
// 关闭线程池
PublicConfig.closeThreadPool(exs);
return depository_data;
}
@ -610,7 +599,8 @@ public class DepositoryController {
}
} else {
}
else {
// 获取本周至今仓库的入/出库数量
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("lineChartData", lineChartData);
@ -710,6 +702,9 @@ public class DepositoryController {
show_data.putAll((Map<?, ?>) result);
}
// 关闭线程池
PublicConfig.closeThreadPool(exs);
return show_data;
}
@ -744,6 +739,9 @@ public class DepositoryController {
}
result.add(obj);
}
// 关闭线程池
PublicConfig.closeThreadPool(exs);
return result;
}
// 用于获取旭日图数据
@ -835,6 +833,8 @@ public class DepositoryController {
stringObjectMap.put("itemStyle", itemStyle);
result.add(stringObjectMap);
}
// 关闭线程池
PublicConfig.closeThreadPool(exs);
return result;
}
@ -1252,6 +1252,8 @@ public class DepositoryController {
}
result.putAll((Map<?, ?>) obj);
}
// 关闭线程池
PublicConfig.closeThreadPool(exs);
return result;
}
@ -1331,6 +1333,9 @@ public class DepositoryController {
}
show_data.putAll((Map<?, ?>) result);
}
// 关闭线程池
PublicConfig.closeThreadPool(exs);
}
@ -1729,6 +1734,8 @@ public class DepositoryController {
result.add(obj);
sum += ObjectFormatUtil.toDouble(((Map<String, Object>) obj).get("value"));
}
// 关闭线程池
PublicConfig.closeThreadPool(exs);
map.put("children", result);
map.put("name", map.get("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);
}
// 关闭线程池
PublicConfig.closeThreadPool(exs);
return list;
}
@ -251,6 +253,8 @@ public class CompanyServiceImpl implements CompanyService {
}
list.addAll((Collection<?>) result);
}
// 关闭线程池
PublicConfig.closeThreadPool(exs);
return list;
}
@ -307,6 +311,8 @@ public class CompanyServiceImpl implements CompanyService {
}
list.add( result);
}
// 关闭线程池
PublicConfig.closeThreadPool(exs);
return list;
}
@ -474,6 +480,8 @@ public class CompanyServiceImpl implements CompanyService {
}
list.add(result);
}
// 关闭线程池
PublicConfig.closeThreadPool(exs);
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"));
priceForToday += ObjectFormatUtil.toDouble(((Map<String, Object>) o).get("price"));
}
// 关闭线程池
PublicConfig.closeThreadPool(exsForToday);
}
if (yesterdaySize > 0) {
// 定义线程用于计算昨天的记录
@ -577,6 +579,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
countForYesterday += ObjectFormatUtil.toDouble(((Map<String, Object>) o).get("count"));
priceForYesterday += ObjectFormatUtil.toDouble(((Map<String, Object>) o).get("price"));
}
// 关闭线程池
PublicConfig.closeThreadPool(exsForYesterday);
}
// 设置今天的额度
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);
}
exs.shutdown();
// 关闭线程池
PublicConfig.closeThreadPool(exs);
// 用于判断当前列表中是否有所有上级
for (int i = 0; i < list.size(); i++) {
if (list.get(i) == null) {
@ -943,7 +944,8 @@ public class DepositoryServiceImpl implements DepositoryService {
}
list.addAll((Collection<?>) result);
}
exs.shutdown();
// 关闭线程池
PublicConfig.closeThreadPool(exs);
// 用于判断当前列表中是否有所有上级
return list;
}
@ -1033,6 +1035,8 @@ public class DepositoryServiceImpl implements DepositoryService {
}
list.add(result);
}
// 关闭线程池
PublicConfig.closeThreadPool(exs);
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.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PublicConfig;
import com.dreamchaser.depository_manage.controller.WebSocketController;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.mapper.ConstructionUnitMapper;
@ -133,7 +134,6 @@ public class ExcelServiceImpl implements ExcelService {
// 定义组合id列表
List<ExcelInfoForMaterial> excelInfoForMaterialS = new ArrayList<>();
List<String> dataIndexList = new ArrayList<>();
System.out.println(excelVosForMaterialList.size());
for (int i = 0; i < excelVosForMaterialList.size(); i++) {
if (((i + 1) % 100) == 0) { // 如果有个开启线程进行处理
excelInfoForMaterialS.add(excelVosForMaterialList.get(i));
@ -165,7 +165,10 @@ public class ExcelServiceImpl implements ExcelService {
}
errMsg.addAll(strings);
}
// 关闭线程池
PublicConfig.closeThreadPool(exs);
}
List<ExcelInfoForMaterial> userExcelMaterialInfo = ExcelFileInfoPool.getUserExcelMaterialInfo(userByPort.getNumber());
if (userExcelMaterialInfo == null) {
userExcelMaterialInfo = new ArrayList<>();
@ -278,6 +281,8 @@ public class ExcelServiceImpl implements ExcelService {
}
errMsg.addAll(strings);
}
// 关闭线程池
PublicConfig.closeThreadPool(exs);
}
List<ExcelInfoByMT> userExcelMaterialTypeInfo = ExcelFileInfoPool.getUserExcelMaterialTypeInfo(userByPort.getNumber());
@ -396,6 +401,8 @@ public class ExcelServiceImpl implements ExcelService {
}
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);
}
// 关闭线程池
PublicConfig.closeThreadPool(exs);
return list;
}
@ -1294,6 +1296,8 @@ public class GroupServiceImpl implements GroupService {
}
list.add(result);
}
// 关闭线程池
PublicConfig.closeThreadPool(exs);
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.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PublicConfig;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.mapper.*;
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).expire("wms_materialTree_result", DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
}
// 关闭线程池
PublicConfig.closeThreadPool(exs);
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).expire("wms_materialTree_result", DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
}
// 关闭线程池
PublicConfig.closeThreadPool(exs);
}
@ -2525,7 +2530,10 @@ public class MaterialServiceImpl implements MaterialService {
}
list.addAll((Collection<?>) result);
}
// 关闭线程池
PublicConfig.closeThreadPool(exs);
// 进行最终的封装
return buildTreeForSelectName(list);
}
@ -2955,6 +2963,8 @@ public class MaterialServiceImpl implements MaterialService {
}
list.add(result);
}
// 关闭线程池
PublicConfig.closeThreadPool(exs);
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.JSONObject;
import com.dreamchaser.depository_manage.config.PublicConfig;
import com.dreamchaser.depository_manage.entity.MaterialType;
import com.dreamchaser.depository_manage.mapper.MaterialTypeMapper;
import com.dreamchaser.depository_manage.service.MaterialTypeService;
@ -293,7 +294,8 @@ public class MaterialTypeServiceImpl implements MaterialTypeService {
}
list.addAll((Collection<?>) result);
}
exs.shutdown();
// 关闭线程池
PublicConfig.closeThreadPool(exs);
// 进行最终的封装
return list;
}

Loading…
Cancel
Save