В моем коде у меня есть класс, содержащий статическую конечную переменную
private static final ForkJoinPool pool = new ForkJoinPool(availableCPUs - 1);
У меня есть долгосрочное задание, отправленное в пул, который потребляет все ресурсы процессора.Любые другие представленные задания будут зависать.Однако, когда я переключился на создание общего пула
private static final ForkJoinPool pool = ForkJoinPool.commonPool();
Все задачи могут быть отправлены и выполнены.
Мне было просто интересно, в чем различия между этими двумя частями кода.commonPool()
все еще вызывает new ForkJoinPool()
и передает availableCPUs - 1
Также я заметил, что commonPool()
использует фабрику типа SafeForkJoinWorkerThreadFactory
, в то время как new ForkJoinPool()
использует ForkJoinPool$DefaultForkJoinWorkerThreadFactory
.Имеет ли это значение?
Большое спасибо!