多线程任务实战

1、创建线程池

根据服务器配置设置线程池参数,如下是标准配置:

package ...

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.task.TaskExecutor;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import java.util.concurrent.ThreadPoolExecutor;

@Configuration
public class TaskExecutorConfig {

    @Bean("getCheckSQLTaskExecutor")
    public TaskExecutor getCheckSQLTaskExecutor() {

        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        // 设置核心线程数
        executor.setCorePoolSize(5);
        // 设置最大线程数
        executor.setMaxPoolSize(5);
        // 设置队列容量
        executor.setQueueCapacity(10);
        // 设置线程活跃时间(秒)
        executor.setKeepAliveSeconds(60);
        // 设置默认线程名称
        executor.setThreadNamePrefix("checkSql-");
        // 设置拒绝策略
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
        // 等待所有任务结束后再关闭线程池
        executor.setWaitForTasksToCompleteOnShutdown(true);
        // 等待超过30s强制终止程序
        executor.setAwaitTerminationSeconds(30);
        return executor;
    }

}

2、设置执行任务

package ...

import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

//省略...

List<CheckSQLDTO> resultList = new ArrayList();
CompletableFuture<Void>[] completableFutures = new CompletableFuture[countThread];
for(int i = 0;i< countThread ;i++){
	List<LpcRiskUW> l =  lists.get(i);
	CompletableFuture<Void> idCardAuthenticationTask = CompletableFuture.runAsync(() -> {
		List<CheckSQLDTO> result = checkSQLService.excuteSQL(l);
		if(result.size()!=0){
			resultList.addAll(result);
		}
	}, taskExecutorConfig.getCheckSQLTaskExecutor());
	completableFutures[i] = idCardAuthenticationTask;
}
CompletableFuture<Void> summaryTask = CompletableFuture.allOf(completableFutures);
try {
	summaryTask.get();
} catch (InterruptedException e) {
	log.error("多线程错误",e);
} catch (ExecutionException e) {
	log.error("多线程错误",e);
}
log.info("执行结束");
long endTime = System.currentTimeMillis();
log.info("方法执行时间:" + (endTime - startTime)/1000 + "秒");
return resultList;

//省略...

执行后的结果存放在resultList 中,具体代码实现需要结合实际情况完成。

评论

  1. bb
    7 月前
    2025-6-28 22:17:23

    继续更新呀,期待期待

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇