2017-02-17 3 views
0

HI le code suivant est utilisé dans une applicationDiscussion problème pool en java

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

lorsque l'application est en cours d'exécution, il strucked dans la boucle

  • En attente de 134 emplois pour terminer.
  • En attente de l'exécution de 134 tâches.
  • En attente de l'exécution de 134 tâches.

la déclaration ci-dessus est à venir continuosly, en fait thread effectuer une opération de mise à jour sur l'augmentation database.will le temps à plus de 10s aider à cette suggestion situation.any est utile

Répondre

0

La documentation ThreadPoolExecutor.shutdown() dit:

Initie une fermeture ordonnée dans laquelle les tâches précédemment soumises sont exécutées, mais aucune nouvelle tâche ne sera acceptée. L'invocation n'a pas d'effet supplémentaire si elle est déjà éteinte.

Cela signifie que vos threads de travail sont responsables de leur fermeture. Vous n'avez pas fourni le code pour vos travailleurs, mais je suppose qu'ils effectuent une opération de blocage qui ne se termine pas. Une approche courante pour résoudre ce problème consiste à faire en sorte que les travailleurs vérifient régulièrement une variable partagée quelconque qui est définie juste avant l'appel shutdown. On leur dit en fait d'arrêter tout ce sur quoi ils travaillent. Un AtomicBoolean devrait faire l'affaire.

+0

effectivement travailleur effectuent une opération commerciale.pour quelques-unes des méthodes mot-clé synchronisé est ajouté. Mot-clé synchronisé conduira à la situation ci-dessus? – siva