【发布时间】:2018-03-15 07:07:57
【问题描述】:
我已根据我的应用程序上下文将 ThreadPoolTaskExecutor 声明为 @Bean:
@Configuration
@ConfigurationProperties(prefix = "application")
@EnableCaching
public class ApplicationConfig {
private static final int POOL_SIZE = 2;
@Bean
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor pool = new ThreadPoolTaskExecutor();
pool.setCorePoolSize(POOL_SIZE);
return pool;
}
}
我有 2 个不同的服务需要连接一个 ThreadPoolTaskExecutor 的实例。每个服务都将提交一个 Runnable 来执行一些特定于服务的工作。
例如,以下是 2 个服务:
@Service
public class TerminatedContractsService {
@Autowired
private ThreadPoolTaskExecutor taskExec;
public void notifyTerminatedContracts(Date d) {
// do some contract specific work
taskExec.submit(() -> System.out.println("emailing terminated contracts..."));
}
}
@Service
public class SalaryCalculationService {
@Autowired
private ThreadPoolTaskExecutor taskExec;
public void calculateSalary(Date d) {
// do some salary related work
taskExec.submit(() -> System.out.println("calculating salaries..."));
}
}
为两个服务共享同一个 ThreadPoolTaskExecutor 实例(因为它是单例的)应该是安全的吗?
您预见到这有什么问题吗?我是否应该改用原型?
【问题讨论】:
标签: java spring threadpool threadpoolexecutor