JDK线程池和Spring线程池的使用

Posted Bien94

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK线程池和Spring线程池的使用相关的知识,希望对你有一定的参考价值。

JDK线程池和Spring线程池实例,异步调用,可以直接使用
(1)JDK线程池的使用,此处采用单例的方式提供,见示例:
public class ThreadPoolUtil {
private static int corePoolSize = 5;
private static int maximumPoolSize = 10;
private static long keepAliveTime = 60L;
private static TimeUnit unit = TimeUnit.SECONDS;
private static int capacity = 1024;
private static ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("jdk-thread-pool-%d").build();
private static final ExecutorService executorService = new ThreadPoolExecutor(corePoolSize,
maximumPoolSize,
keepAliveTime,
unit,
new LinkedBlockingQueue<>(capacity),
namedThreadFactory,
new ThreadPoolExecutor.AbortPolicy());

private ThreadPoolUtil () {

}

public static ExecutorService getExecutorService () {
return executorService;
}
}

在其它地方可以直接这样使用:
ThreadPoolUtil.getExecutorService().execute(() -> {
System.out.println("test1");
System.out.println("test2");
})

(2)Spring线程池的使用,此处通过配置类的方式配置线程池的相关属性,见示例:
@Configuration
@EnableAsync
public class DocataThreadBeanConfig {private int corePoolSize = 5;private int maxPoolSize = 10;private int queueCapacity = 1024;private String namePrefix = "async-service-task-";
// 上述属性可以通过@Value来读取配置值 @Bean(name
= "asyncServiceTaskExecutor") public TaskExecutor asyncServiceExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); // 设置核心线程数 executor.setCorePoolSize(corePoolSize); // 设置最大线程数 executor.setMaxPoolSize(maxPoolSize); // 设置队列容量 executor.setQueueCapacity(queueCapacity); // 设置线程活跃时间(秒) executor.setKeepAliveSeconds(60); // 设置默认线程名称 executor.setThreadNamePrefix(namePrefix); // 设置拒绝策略 executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); // 等待所有任务结束后再关闭线程池 executor.setWaitForTasksToCompleteOnShutdown(true); executor.initialize();; return executor; } } 在其它文件中需要这样使用: @Resource(name="asyncServiceTaskExecutor") private ThreadPoolTaskExecutor asyncServiceTaskExecutor; 不要直接使用@Autowired,否则会提示失败的 @Autowired private ThreadPoolTaskExecutor asyncServiceTaskExecutor;

20191128闪

以上是关于JDK线程池和Spring线程池的使用的主要内容,如果未能解决你的问题,请参考以下文章

java自带线程池和队列详细讲解,android中适用

线程池和任务

java线程池和五种常用线程池的策略使用与解析

Java中的连接池和线程池设置

如何使用java语言实现一个线程池,不使用jdk自带的线程池

Pythongevent 中协程池和线程池的简单使用