Unsafe.park
, несмотря на страшно звучащее имя, обычно используется всеми видами блокирующих вызовов (особенно в новом (ish) java.util.concurrent
пакете).
Если вы посмотрите несколько кадровдальше вниз по стеку вы увидите что-то вроде java.util.concurrent.LinkedBlockingQueue.take
(т.е. некоторый класс библиотеки JDK), за которым следует что-то вроде com.example.myapp.MyClass.getNextJob
(т.е. ваш класс, который использует класс библиотеки).
Если бы мне пришлосьрискуя предположить, я бы сказал, что вы делаете какой-то вызов, который блокирует навсегда - и поэтому, когда больше нечего возвращать, этот поток просто сидит там, ожидая «следующего» элемента.Вы можете решить эту проблему, установив какой-то «завершенный» флаг, а затем либо прервите ожидающий поток, либо предоставив блокирующему вызову тайм-аут, заставив его проверить флаг.В зависимости от вашего кода может быть осуществлен любой из этих или альтернативных вариантов, но, надеюсь, этого достаточно, чтобы начать работу.
Редактировать: после просмотра трассировки стека, finnw прав , что вам нужноотключите службу исполнителя.