10
votes

Définissez le code de sortie Java sans rien sortir

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.


2 commentaires

@ 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.


4 Réponses :


1
votes

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.


0 commentaires

3
votes

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 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.)


4 commentaires

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 ? juste appeler system.exit 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 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 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 .



0
votes

Dans un programme très concourant avec beaucoup d'opérations d'arrêt

C'est un code qui mène à moi.

Je peux comprendre comment plusieurs threads pourraient veux pour arrêter, mais ils ne devraient pas être autorisés à le faire.

Au lieu de cela, je créerais une méthode globale appelée initialeHuTown (int 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.


1 commentaires

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.



0
votes

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).

Je suis curieux, si plusieurs threads définissent le résultat, lequel devriez-vous utiliser?


6 commentaires

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"?