2017-02-17 2 views
0

HI следующий код используется в приложенииThread вопрос бассейн в Java

threadPool.shutdown(); 
     while (!threadPool.awaitTermination(10, TimeUnit.SECONDS)) { 
      logger.info("Waiting for " 
        + (threadPool.getQueue().size() + threadPool 
          .getActiveCount()) + " jobs to complete."); 
     } 

когда приложение работает, оно strucked в петле

  • Ожидание на 134 рабочих мест для завершения.
  • Ожидание 134 рабочих мест для заполнения.
  • Ожидание 134 рабочих мест для заполнения.

вышеприведенное утверждение приходит непрерывно, фактически поток выполняет операцию обновления на database.will увеличения времени более чем 10сек поможет в этом situation.any предложение полезно

ответ

0

Документация ThreadPoolExecutor.shutdown() говорит:

Выполняет упорядоченное завершение работы, в котором ранее заданные задачи выполнялись , но новые задачи не принимаются. Invocation не имеет никакого дополнительного эффекта, если он уже выключен.

Это означает, что ваши рабочие потоки несут ответственность за закрытие. Вы не указали код для своих работников, но я предполагаю, что они выполняют операцию блокировки, которая не выходит. Общий подход к решению этого вопроса заключается в том, чтобы рабочие регулярно проверяли доступную общую переменную, установленную непосредственно перед вызовом shutdown. Им эффективно говорят прекратить все, над чем они работают. AtomicBoolean должен сделать трюк.

+0

Фактически, работники выполняют некоторую операцию в бизнесе. Для нескольких методов синхронизированное ключевое слово добавлено. Синхронизированное ключевое слово приведет к ситуации выше? – siva

Смежные вопросы