Dans un programme très concourement avec de nombreuses opérations d'arrêt, vous vous demandez comment définir le code de sortie sans appeler prématurément système.exit ()? Possible de définir un "Exécutez ce code lorsque tout le reste est terminé" Méthode? Mais j'aimerais vraiment simplement définir prématurément le code de sortie. P>
4 Réponses :
Demandez à un fil maître apparip sur tous les autres threads de telle sorte qu'il ne s'éteint que lorsque tous les autres threads sont terminés. P>
Si je comprends bien ce que vous voulez, gardez en quelque sorte le code de sortie, exécutez quelques méthodes, puis appelez system.exit code> avec le code de sortie pré-décidé.
Imo ce que vous devriez faire est d'utiliser Crochets d'arrêt au lieu. C'est à dire. Votre code sera exécuté avant que la JVM s'arrête et (si j'ai eu votre exigence correctement) aura le même résultat avec une implémentation de codage simple (c.-à-d. Au lieu d'utiliser à l'aide de la variable d'état et une logique codante inhabituelle pour réaliser ce que vous essayez de faire etc.) p>
Programme a des crochets d'arrêt; Est-ce dangereux d'appeler la sortie de l'un d'entre eux? On dirait que cela bouclerait ou être illégal ou quelque chose.
@DJechlin: Si le code dans un crochet d'arrêt est en cours d'exécution, cela signifie que le JVM est arrêté. Pourquoi appelez-vous system.exit code>? juste appeler
system.exit code> avec le statut code que vous êtes intéressé et laissez-le arrêter correctement
Je vois, déplacez la méthode d'arrêt à un crochet d'arrêt, appelez le système.exit directement au lieu de la méthode dans le crochet d'arrêt.
Oui.L'a idée est que sur shutdown jvm code> commence à exécuter les hooks shutdowns.so Tout votre code dont vous avez besoin sur la fermeture doit être placé là-bas. Call
system.exit code> dans le Lieu approprié (une fois avec le code dont vous avez besoin) et laissez le JVM commencer à exécuter les crochets de manière appropriée. Votre code fonctionnera avant
JVM code>.
Dans un programme très concourant avec beaucoup d'opérations d'arrêt p> blockQuote>
C'est un code qui mène à moi. p>
Je peux comprendre comment plusieurs threads pourraient veux em> pour arrêter, mais ils ne devraient pas être autorisés à le faire. P>
Au lieu de cela, je créerais une méthode globale appelée
initialeHuTown (int code) code>. Cette méthode contiendrait une logique pour déterminer quand il convient de s'arrêter réellement. Étant donné que vous ne voulez pas de retourner de thread de cette méthode, vous pouvez implémenter une sorte de serrure sans jamais retourner et consigner le fil à attendre sur cette serrure. P>
Qu'entendez-vous par "odeur de code"? Et oui, j'ai une méthode qui fait exactement cela, il initie l'arrêt de tous les objets qui doivent être arrêtés, mais ces arrêts seront interrompus si elle appelle System.exit à la fin.
Stockez simplement le résultat quelque part et utilisez tout outil de synchronisation approprié pour dire que vous avez terminé. Lorsque vous avez terminé, lisez simplement le résultat stocké et quittez à l'aide de System.exit (résultat). p>
Je suis curieux, si plusieurs threads définissent le résultat, lequel devriez-vous utiliser? p>
Quel "outil de synchronisation approprié" me dit que j'ai fini? Et soit le premier, soit le premier, dans cette conception de ce programme, un seul est possible actuellement.
Quel outil dépend de votre application. Comment savez-vous que vous devriez sortir?
Dans ce cas, instruction de Mbean.
Désolé d'être incertain. IMENT: Comment pouvez-vous dire que tout le reste est fait?
C'est en fait exactement la chose que je ne sais pas.
Mais comment le code détermine-t-il que "tout le reste est fait"?
@ Sjuan76 - et fais quoi avec ça?
De votre question, il semblerait que vous souhaitiez configurer / stocker la valeur de sortie avant de quitter le fil. La variable statique était de stocker la valeur et de la récupérer lorsque vous avez fait la sortie. Voyant que vous recherchiez des crochets d'arrêt, je sais que ce n'était pas l'idée.