【发布时间】:2020-12-13 11:27:44
【问题描述】:
我有一个关于执行器线程池的问题,一个在另一个内部运行。
假设我有带有预定方法的 Spring 服务,其他服务创建 ExecutorService 并运行一些操作方法
@Service
public class ScheduledService
{
@Autowired
WorkService workService;
@Scheduled(cron = "1 * * * * * ")
public void method() {
workService.execute();
}
}
@Service
public class WorkService {
private ExecutorService executorService = Executors.newFixedThreadPool(20);
public void execute() {
executorService.submit(()->action());
}
private void action() {
//some action
}
}
据我所知,@Scheduled 的默认池大小为 1。在此池的内部线程中,我正在尝试使用更大的池创建新的 executorService。
所以问题是 - 执行将如何分布在 CPU 内核上,执行器服务真的会并行工作吗?我有一种感觉,它没有。我尝试在 2 个 vCore 和 4 个 vCore 机器上运行相同的作业,并且执行时间相同。
谢谢。
【问题讨论】:
标签: java spring multithreading executorservice