Spring 与 JDK 线程池的简单使用示例详解

这篇文章主要介绍了Spring与JDK线程池的简单使用,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

1.配置自定义共享线程池(Spring线程池)

@Configuration
@EnableAsync
public class ThreadPoolConfig{
 
  //主要任务的调度,计划执行
  @Bean("taskScheduler")
  public Executor createScheduler(){
	    // 创建一个线程池对象
        ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
        // 定义一个线程池大小
        scheduler.setPoolSize(100);
        // 线程池名的前缀
        scheduler.setThreadNamePrefix("taskScheduler-");
        // 设置线程池关闭的时候等待所有任务都完成再继续销毁其他的Bean
        scheduler.setWaitForTasksToCompleteOnShutdown(true);
        // 设置线程池中任务的等待时间,如果超过这个时候还没有销毁就强制销毁,以确保应用最后能够被关闭,而不是阻塞住
        scheduler.setAwaitTerminationSeconds(60);
        // 线程池对拒绝任务的处理策略,当线程池没有处理能力的时候,该策略会直接在 execute 方法的调用线程中运行被拒绝的任务;如果执行程序已关闭,则会丢弃该任务
        scheduler.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
	    return scheduler;
  }

  //主要任务的执行
  @Bean("taskExecutor")
  public Executor createExecutor(){
	    // 创建一个线程池对象
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
         //核心线程池大小
        executor.setCorePoolSize(10);
        //最大线程数
        executor.setMaxPoolSize(30);
        //队列容量
        executor.setQueueCapacity(100);
        //活跃时间
        executor.setKeepAliveSeconds(60);
        //线程名字前缀
        executor.setThreadNamePrefix("taskExecutor-");
        // 设置线程池关闭的时候等待所有任务都完成再继续销毁其他的Bean
        executor.setWaitForTasksToCompleteOnShutdown(true);
        // 线程池对拒绝任务的处理策略,当线程池没有处理能力的时候,该策略会直接在 execute 方法的调用线程中运行被拒绝的任务;如果执行程序已关闭,则会丢弃该任务
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        return executor;
  }

}

2.编写执行任务对象与具体任务逻辑方法

@Component
public class TaskComponent{
  @Async("taskExecutor")
  public void doTaskExecutor() {
	System.out.println("任务开始执行!!!");
  	//具体的执行任务
	//。。。。。。。
  }

//  //有返回值(ObjectVo为自己定义的返回类型)
//@Async("taskExecutor")
//public Future<ObjectVo> doTaskExecutor() {
//	System.out.println("任务开始执行!!!");
//  	//具体的执行任务
//	//。。。。。。。
//	ObjectVo result=new ObjectVo();
//	return new AsyncResult<>(result);
/

本文标题为:Spring 与 JDK 线程池的简单使用示例详解

基础教程推荐