Вы можете использовать синхронизированные методы или синхронизированные блоки, если уверены, что они не будут блокироваться в течение длительного времени. Как минимум, они не должны вызывать Object.wait()
и Semaphore.aquire()
, потому что эти методы блокируют текущий поток на неопределенное время, и такая блокировка приводит либо к переполнению памяти, когда пул потоков пытается создать новый поток для замены заблокированных потоков, или нехватка потоков (своего рода тупик), когда нет доступных потоков и вся работа останавливается навсегда.
Это верно для всех типов пулов потоков, не только для ForkjoinPool
, асинхронные задачи, не только ForkJoinTask
.