// 创建一个线程池,根据CPU核心数来创建 int corePoolSize = Runtime.getRuntime().availableProcessors(); ExecutorService executorService = Executors.newFixedThreadPool(corePoolSize); // 将任务拆分成多个子任务 List<List<UserEo>> subUserEoList = ListUtils.splitList(userEoList, corePoolSize); // 提交子任务到线程池中执行 for (List<UserEo> subList : subUserEoList) { executorService.execute(() -> { for (UserEo userEo : subList) { List<DataPermissionSchema> userDataPermissionSchema = getUserDataPermissionSchema(userEo.getUserUid(), userEo.getOrgCode()); redisTemplate.opsForValue().set(SystemsConstant.DATA_PERMISSION_SCHEMA + userEo.getUserUid(), ObjectUtil.toString(userDataPermissionSchema)); } });} // 关闭线程池 executorService.shutdown();改为手动创建线程池
时间: 2024-02-03 15:11:38 浏览: 91
如果你想手动创建线程池,你可以使用以下代码:
```
// 创建一个线程池,根据CPU核心数来创建
int corePoolSize = Runtime.getRuntime().availableProcessors();
ThreadPoolExecutor executorService = new ThreadPoolExecutor(
corePoolSize, // 核心线程数
corePoolSize, // 最大线程数
0L, TimeUnit.MILLISECONDS, // 空闲线程存活时间
new LinkedBlockingQueue<>(), // 任务队列
Executors.defaultThreadFactory(), // 线程工厂
new ThreadPoolExecutor.AbortPolicy() // 拒绝策略
);
// 将任务拆分成多个子任务
List<List<UserEo>> subUserEoList = ListUtils.splitList(userEoList, corePoolSize);
// 提交子任务到线程池中执行
for (List<UserEo> subList : subUserEoList) {
executorService.execute(() -> {
for (UserEo userEo : subList) {
List<DataPermissionSchema> userDataPermissionSchema = getUserDataPermissionSchema(userEo.getUserUid(), userEo.getOrgCode());
redisTemplate.opsForValue().set(SystemsConstant.DATA_PERMISSION_SCHEMA + userEo.getUserUid(), ObjectUtil.toString(userDataPermissionSchema));
}
});
}
// 关闭线程池
executorService.shutdown();
```
这里使用了 `ThreadPoolExecutor` 类手动创建线程池,并设置了一些参数,例如核心线程数、最大线程数、空闲线程存活时间等。还设置了线程工厂和拒绝策略。然后使用 `execute` 方法提交任务到线程池中执行,最后调用 `shutdown` 方法关闭线程池。
阅读全文