У меня есть пул потоков инстанцированного сПотерянных все представленные задачи в ThreadPoolExecutor
LinkedBlockingQueue<Runnable> taskQue = new LinkedBlockingQueue<Runnable>();
new ThreadPoolExecutor(100, 100, 0L, TimeUnit.MILLISECONDS, taskQue);
я представил большое количество (18k +) работоспособных задачи к нему; каждая задача будет обрабатывать и отправлять данные в другой LinkedBlockingQueue, скажем, dataQue, и у меня есть цикл while (True) для опроса и обработки этих данных из dataQue.
Я регистрирую размер taskQue каждую минуту, он работает нормально на некоторое время, потому что я вижу, что его размер уменьшается постепенно. Однако, примерно через 20 минут после запуска программы, размер уменьшается с 17927 до 0! Моя программа все еще работает в этой точке, и цикл while все еще обрабатывает данные из dataQue.
Мне интересно, как это возможно? Я занимаюсь поиском и изучением джавакоков. Ни LinkedBlockingQueue, ни ThreadPoolExecutor, кажется, автоматически отменяет/время ожидания. Возможно ли, что GC ест мои задачи?
Да, его переменная класса, поэтому не должна выходить за рамки. Я checjed все его потоки живы, просто ждут задач. – Hebo