线程池的几种方式

1.CompletableFuture
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
    Thread.sleep(1000);
    return "Result";
});  

future.thenAccept(result -> {
    // Future完成后,此回调会被执行
    System.out.println(result); 
});

future.get(); // 会被阻塞,等待结果

2.ThreadPoolTaskExecutor

@Configuration
public class ThreadPoolTaskExecutorConfig {
 
    @Bean
    public Executor customThreadPoolTaskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        // Java虚拟机可用的处理器数
        int corePoolSize = Runtime.getRuntime().availableProcessors();
        // 配置核心线程数
        executor.setCorePoolSize(corePoolSize);
        // 配置最大线程数
        executor.setMaxPoolSize(corePoolSize * 2 + 1);
        // 配置队列大小
        executor.setQueueCapacity(100);
        // 空闲的多余线程最大存活时间
        executor.setKeepAliveSeconds(3);
        // 配置线程池中的线程的名称前缀
        executor.setThreadNamePrefix("thread-execute-");
        // 当线程池达到最大大小时,在调用者的线程中执行任务
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        // 执行初始化
        executor.initialize();
        return executor;
    }
}
 

 

3.ThreadPoolExecutor

posted @ 2023-05-24 11:09  每月工资一万八  阅读(13)  评论(0)    收藏  举报