1、线程池参数
| 序号 | 名称 | 类型 | 含义 |
|---|---|---|---|
| 1 | corePoolSize | int | 核心线程池大小 |
| 2 | maximumPoolSize | int | 最大线程池大小 |
| 3 | keepAliveTime | Long | 核心线程池大小 |
| 4 | unit | TimeUnit | 时间单位 |
| 5 | workQueue | BlockingQueue | 线程等待队列 |
| 6 | threadFactory | ThreadFactory | 线程创建工厂 |
| 7 | handler | RejectedExecutionHandler | 拒绝策略 |
2、自定义线程池
private final ThreadPoolExecutor testSynchronizeExecutor = new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors() * 2,
Runtime.getRuntime().availableProcessors() * 10, 0, SECONDS,
new ArrayBlockingQueue<>(500), new NamedThreadFactory("test-synchronize-", false));
3、结合业务使用线程池
//总数量
int newsCount = 5000;
//页大小 例如一页 20条数据
int count = Constants.PAGE_SIZE;
//线程数
int threadNum = newsCount / count + 1;
CountDownLatch countDownLatch = new CountDownLatch(threadNum);
for (int i = 1; i < threadNum + 1; i++) {
//偏移量
int offset = i;
testSynchronizeExecutor.execute(() -> {
try {
//业务处理逻辑
String requestUrl = SysConfigUtil.getString(SysConfigEnum.youxi_older_url);
requestUrl = MessageFormat.format(requestUrl,offset);
log.info("***** | 请求参数 requestUrl:{} | offset:{} ", requestUrl, offset);
//一系列操作
} catch (Exception e) {
log.info("多线程执行******数据异常:{}", e.getMessage());
} finally {
countDownLatch.countDown();
}
});
}
try {
countDownLatch.await();
} catch (InterruptedException e) {
log.info("*******数据异常:{}", e.getMessage());
}