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

Java Discussion :

Arrêt Thread interrupt()


Sujet :

Java

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Points : 301
    Points
    301
    Par défaut Arrêt Thread interrupt()
    Bonjour,

    Dans le cadre de mon projet, je dois appeler des WebService.
    Dans le cas où le WebService ne répond pas, je souhaite ajouter un timeout sur un thread qui permettrais d'arrêter l'appel à ce WebService.

    J'ai donc trouvé un code qui paraissait parfaitement me convenir, mais cela ne fonctionne pas.

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    final long TIMEOUT = 10;//30000;
    cat.error("pre-passe");
    Thread appelWS = new Thread() {
    	@Override
    	public void run() {
    	appelWebServiceMail(parametre1);
                  }
    };
    cat.error("pre-passe1");
    appelWS.setDaemon(true);//le Thread d'appel au WS est défini comme démon
    appelWS.start();//lancement de l'appel
    long end = System.currentTimeMillis() + TIMEOUT;
    //on boucle tant que le timeout n'est pas écoulé
    while (end > System.currentTimeMillis()) {
    	cat.error("pre-passe2");
    	Thread.sleep(1);//on attend un seconde
    }
    appelWS.interrupt();
    cat.error("pre-passe3");
    Le problème est que j'ai mis pas mal d'affichage de messages d'erreurs dans la fonction appelWebServiceMail et que ceux-ci continuent à s'afficher même après que "pre-passe3" soit affiché, tout comme les fonctions appelées par cette fonction.

    Hors, la fonction "interrupt()" est supposée arrêt le Thread.

    Voyez-vous où est le problème ?

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par PP(Team) Voir le message
    Hors, la fonction "interrupt()" est supposée arrêt le Thread.
    Non : la fonction interrupt() est supposée demander au thread de bien vouloir s'arrêter.

    Cela peut engendrer des exceptions sur certaines méthodes d'E/S.


    a++

    PS : Au passage tu peux remplacer ta boucle d'attente par appelWS.join(TIMEOUT), c'est plus propre...
    PS2 : Certaines fonctions d'E/S mettent en place des timeouts...

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Points : 301
    Points
    301
    Par défaut
    Bonjour,

    Merci pour la réponse.
    Un de mes collègues m'a demandé de ne pas utiliser de Threads sur des appli Web, donc j'ai remplacé cela par un test pour savoir si le serveur répond ou pas en mettant un Timeout sur la requete.

    Bonne journée.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    et pour la culture générale

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Thread.sleep(1);//on attend un seconde
    Non, ca attends 1 milliseconde, pas 1 seconde.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Points : 301
    Points
    301
    Par défaut
    Oui oui, c'était juste qu'avant c'était 1000, pour mes tests j'avais raccourcis le temps pour faire que le tout fasse 10 milliemes et chaque pause fasse 1 millieme.

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

Discussions similaires

  1. [WD16] Destructeur de classe appelé après arrêt thread contenu dans méthode
    Par jurassic pork dans le forum WinDev
    Réponses: 9
    Dernier message: 27/07/2012, 03h21
  2. Détection fermeture pour arrêté thread
    Par kt180 dans le forum C#
    Réponses: 8
    Dernier message: 10/11/2010, 16h26
  3. Thread interrupt, comment interrompre une API tout en libérant les ressources
    Par rpelissi dans le forum Concurrence et multi-thread
    Réponses: 0
    Dernier message: 19/10/2009, 13h30
  4. [Thread] interrupt qui semble ne pas fonctionner
    Par Balbuzard dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 05/09/2008, 11h17
  5. Thread interruption (comment faire?)
    Par ploxien dans le forum Concurrence et multi-thread
    Réponses: 10
    Dernier message: 17/08/2007, 15h25

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