Я думаю, что проблема в том, что вы используете Tailer неправильно.
Вы пытаетесь использовать Tailer, используя пул потоков службы исполнителя. Но у Tailer есть свойство не выходить из метода run()
, пока что-то внешне не вызовет Tailer.stop()
. И в вашем коде этого не произойдет.
Хуже того, вы используете ScheduledThreadPoolExecutor
и говорите ему запускать новую нить Tailer каждые 20 секунд!
Итак, что произойдет, так это то, что первые запланированные запуски N Tailer
будут захватывать каждый из потоков службы исполнителя ... и навсегда зависать на нем. Когда все потоки используются, Исполнитель будет ожидать завершения одного из потоков ... и этого не произойдет.
Решение - запустить каждый экземпляр Tailer в отдельном потоке. Вы не должны пытаться использовать поток из конечного пула потоков, потому что вы исчерпаете пул. И вам не следует пытаться использовать службу исполнителя, по той же причине.
Если использование выделенных тем не работает, у меня нет идей. Вам нужно самостоятельно взглянуть на код Tailer и / или запустить приложение под отладчиком, чтобы увидеть, что на самом деле делают потоки Tailer.