IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Que se passe t il quand j'interromps manuellement mon programme?


Sujet :

Langage Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Points : 153
    Points
    153
    Par défaut Que se passe t il quand j'interromps manuellement mon programme?
    Salut,


    J'ai un programme qui fait de gros calculs et donc il consomme beaucoup de temps.

    Parfois, j'ai envie d’interrompre mon programme avant la fin. Mais j'ai envie d'avoir quelques information sur ce qui s'est passé. Par exemple, j'aimerai connaitre la quantité de donner qui ont été traitées.

    Pour cela, quand je suis sous Eclipse, je clique sur le 'bouton rouge'. Dans les autres contextes, je fait un 'Ctl C'.

    Comment puis-je savoir dans mon code qu'une telle action a eu lieu? Y-a-t-il un lien avec l'InterruptedException?

    Merci de votre aide.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    L'InterruptedException est un moyen de notifier à une thread suspendue (ex: on a appelé Thread.sleep()) qu'on a changé quelque chose pendant qu'elle "dormait". Cette exception est déclenchée par l'appel de la méthode Thread.interrupt() par une autre thread. Pas de lien donc avec le kill sauvage du process.
    Les shutdown hooks de la JVM permettent peut-être de faire quelque chose, mais sans garantie...

    Pour moi, le meilleur moyen de savoir où en était ton programme reste d'avoir des logs bien pensés (sans garantie que tu aies le dernier état juste avant le kill, tu auras l'état au moment du dernier appel de log en date), et/où si tu as des résultats intermédiaires enregistrés d'analyser l'état des données.

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    Par défaut
    Citation Envoyé par therwald Voir le message
    Les shutdown hooks de la JVM permettent peut-être de faire quelque chose, mais sans garantie...
    On ne peut rien contre un vrai gros kill sauvage, c'est sûr... Et apparemment c'est ce que fait le bouton rouge d'Eclipse.

    Mais pour les trucs comme le ctrl+C et autre kill simple, ça peut être repéré (mais pas annulé) par Runtime.getRuntime().addShutdownHook(hook);

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Mais pour les trucs comme le ctrl+C et autre kill simple, ça peut être repéré (mais pas annulé) par Runtime.getRuntime().addShutdownHook(hook);
    Du coup ça doit pouvoir être utilisé pur répondre à la question: préparer un aprçu de l'état du programme au moment de l'interruption...
    Comment la JVM gère-t-elle les hook "rebelles"? Time-out kill? Ca dépend peut-être de la JVM en question?
    EDIT: ceci dit je me demande si ça vaut le coup de faire aussi compliqué pour ce que de simples logs bien choisis permettraient de faire avec une assez bonne précision...

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    Après avoir visité mon ami google, les shutdownhooks:
    1) ne garantissent rien
    2) globalement ont intérêt à travailler plutôt vite
    3) doivent être écrits très précautionneusement car la période de fermeture d'une JVM n'est pas forcément un moment où l'environnement est stable

    cf ici: http://download.oracle.com/javase/1....lang.Thread%29

    Globalement, je pense que plutôt que de chercher à détecter la fermeture et vite essayer de préparer un résumé des traitements & co, LGNord devrait compter sur des logs qui retracent au fur et à mesure l'avancement. Il suffit de trouver le bon compromis entre précision des indication et consommation de ressources (surtout espace disque, d'ailleurs) par les logs.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Points : 153
    Points
    153
    Par défaut
    Super. Merci beaucoup pour vos réponses.

    Je ne me suis pas encore lancé dans les logs car j'ai une crainte: celui de dimuner les performances de mon application.

    Par exemple, je kill mon application aprés 5 minutes. Mon log m'indique que 3% de mes données ont été traitées. Que conclure de cette information? Peut-être que 90% du temps a été passé dans le code qui gére le log.

    Comme vous l'avez bien dit, j'ai besoin d'un system de logs bien pensés...

  7. #7
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    Citation Envoyé par LGnord Voir le message
    Super. Merci beaucoup pour vos réponses.

    Je ne me suis pas encore lancé dans les logs car j'ai une crainte: celui de dimuner les performances de mon application.

    Par exemple, je kill mon application aprés 5 minutes. Mon log m'indique que 3% de mes données ont été traitées. Que conclure de cette information? Peut-être que 90% du temps a été passé dans le code qui gére le log.

    Comme vous l'avez bien dit, j'ai besoin d'un system de logs bien pensés...
    La réponse s'appelle log4j ou son successeur logback
    Ils sontoptimises pour.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Points : 153
    Points
    153
    Par défaut
    Je vais aller voir.

    Encore merci pour votre aide.

  9. #9
    Membre régulier
    Inscrit en
    Janvier 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 51
    Points : 71
    Points
    71
    Par défaut
    Tu peux aussi checker AOP (c'est un paradigme).

  10. #10
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    Avec un bémol: l'AOP est juste une manière de gérer automatiquement où on ajoute certaines comportements transversaux, donc ne répond à mon sens pas directement à la question. Perso je trouve l'AOP plus adapté à des projets de style grands projets industriels très normés où on a des politiques à faire adopter de manière générale. Attention aussi au style d'AOP adopté quand on fait du calcul intensif: l'AOP spring sans tissage, avec ses proxy, génère des indirections dans les appels de méthode qui ne sont pas forcément perf friendly...sans parler du coût en complexité d'ajouter spring à une appli juste pour ça...l'AOP tissée, en revanche, préserve les perfs mais complexifie le build...et là on en revient au type de projet, qui serait plus ciblé projet industriel normé...

  11. #11
    Membre régulier
    Inscrit en
    Janvier 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 51
    Points : 71
    Points
    71
    Par défaut
    Je trouve ça plus propre personnellement. Et puis, j'avoue que je n'ai pas pris le temps de tester les perf (car je n'ai jamais eu de problème de perf en utilisant ce procédé).

    Je proposais ça en plus de ce que tu avais dis. Histoire que le concerné ne se trouve pas avec une seule solution.

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Points : 153
    Points
    153
    Par défaut
    Merci SamSer.

    Je suis effectivement curieux. De ce fait je suis pret à explorer toutes les proposition. Par contre, une rapide recherche sur AOP me fait craindre que le cout de mise en œuvre soit supérieur au gain de que je vais avoir.

    Par ailleurs, l'idée des logs me plait bien car elle va me permettre de résoudre d'autres problèmes. Ils sont en bas de ma TODO liste mais je vais faire d'une pierre plusieurs coups.

  13. #13
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    SamSer a raison sur un point: AOP permet de résoudre élégament certains problèmes. Pour résumer, il marche très bien sur tous les problèmes du genre:
    "partout où je fais cette action, je veux appliquer ce code" quand l'action en question (généralement parce que la préoccupation est technique et non fonctionnelle) est répartie un peu partout sur des parties de ton modèle qui ne sont pas forcément reliées fonctionnellement. Ca permet de ne pas polluer ton code et/ou ton modèle fonctionnel par des considérations plutôt techniques. Comme tu le souligne, le bémol c'est la complexité que ça ajoute. Ca peut aussi rendre le code plus difficile à comprendre, puisque le produit final fait des choses qui ne figurent pas noir sur blanc dans le code ciblé. Comme beaucoup d'outils puissants, ça fait des merveilles quand on s'en sert bien, et des catas quand on en abuse...

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Points : 153
    Points
    153
    Par défaut
    Dans les exemples d'utilisation de l'AOP, je trouve souvent:
    - information pendant l'exécution du logiciel (trace) ;

    trace, log c'est quand même plus ou moins la même chose... L'idée n'est peut pas à jeter si vite...

  15. #15
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    L'idée n'est en soi pas à jeter: en effet le log est un cas d'utilisation classique pour AOP. Dans de grosses applis où modifier une politique de log peut mener à modifier très nombreux points de code ça peut même être fondamental pour éviter de gaspiller de nombreuses heures à faire la même modif en x points du code, sans parler du risque d'oublis et d'erreurs. Ca peut même permettre de faire certaines choses très dures (voir impossibles) sans (je me rappelle encore du débuggage d'une fuite de connections bases de données gràce à un AOP bien senti sur les méthodes open/close des API JDBC...).
    Je soulignais juste que ça a un coût qu'il faut payer en connaissance de cause en terme de complexité d'appli / lisibilité du code. Comme disait la pub: sans maitrise la puissance n'est rien...
    Mais j'utilise régulièrement un forme ou une autre d'AOP et c'est magique sur certains problème...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/03/2012, 08h46
  2. Que se passe-t-il quand on clique le bouton précédent?
    Par Invité dans le forum Webdesign & Ergonomie
    Réponses: 2
    Dernier message: 24/02/2009, 02h30
  3. [AJAX] Que se passe t'il quand une requête est envoyé ?
    Par whitespirit dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 31/07/2008, 09h28
  4. que se passe t il quand ...
    Par -<R1>- dans le forum Débuter
    Réponses: 2
    Dernier message: 28/06/2004, 15h00
  5. [VB6] [Install] Que se passe-t-il lors du setup?
    Par petit scarabée dans le forum Installation, Déploiement et Sécurité
    Réponses: 4
    Dernier message: 28/10/2002, 09h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo