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

Concurrence et multi-thread Java Discussion :

Threads et arrêt d'une méthode


Sujet :

Concurrence et multi-thread Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut Threads et arrêt d'une méthode
    Bonjour,
    j'aimerais pouvoir arrêter une méthode si elle n'est pas terminée au bout de 50 secondes. Comment puis-je réaliser cela ?
    Je pense qu'il faut utiliser un Thread mais je ne vois pas comment implémenter cela
    Voici un bout du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    private boolean Method(){
     
    		if(canal1.receiveString().equals(NACK)){
     
    			return false;		
    		}
    		else{
    		return true;
    	}
    }
    J'aimerais pouvoir retourner false + un message d'erreur si la méthode n'est pas terminée au bout de 50 s

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Sur le principe, il faut creer :
    - creer une classe qui implemente Runnable. Dans la methode run, tu mets le code fonctionnel de ta methode. Il faut stocker le resultat dans un attribut de la classe (et si l'appel a abouti)
    - creer un thread dans ta methode (avec le Runnable en parametres). Tu le demarres.
    - tu te synchronises sur le thread par exemple avec thread.join(timeout),
    - tu tentes de terminer le thread (thread.interrupted) si l'operation est toujours en cours

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 113
    Par défaut
    Je ne sait pas si ce truc peut marché??


    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
     
     
    Public class Method extends Thread{
     
    Private Type_canal canal;
     
    Public Method (Type_canal canal){
    This.canal=canal;
    }
    public void run() {
    if(canal.receiveString().equals(“NACK”)){
     
    			return false;		
    		}
    		else{
    		return true;
    	}
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    blabla
    …
    …
    Thread T=new Method(canal1);
    T.start();
    T.join(50*1000);
    If(!(T. interrupted())){
    System.out.print("la méthode n est pas terminée au bout de 50 s") ;
    }
    T.interupt() ;
    …
    …

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    En fait pas tout a fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void run() {
      if(canal.receiveString().equals(“NACK”)){
        return false;		
      }
      else{
        return true;
      }
    }
    La methode run ne retourne pas de boolean. Il faut conserver le resultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void run() {
      result = true;
      if(canal.receiveString().equals(“NACK”)){
        result = false;	    	  
    }
    Et ajouter une methode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public boolean getResult() {
       return result;
    }

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 113
    Par défaut
    of cours , et donc ce cas est que va faire :
    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
     
    blabla
    …
    …
    Thread T=new Method(canal1);
    T.start();
    T.join(50*1000);
     
    Boolean b=T.getResult();
     
    If(!(T. interrupted())){
    System.out.print("la méthode n est pas terminée au bout de 50 s") ;
    }
    T.interupt() ;
    …
    …
    ???

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Je viens de lire sur un autre thread qu'il existe déjà une classe qui fait tout ca :
    java.util.concurrent.Future<>

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

Discussions similaires

  1. Arrêter une méthode qui s'exécute en Thread
    Par Mister Nono dans le forum Concurrence et multi-thread
    Réponses: 3
    Dernier message: 27/10/2008, 11h43
  2. Exécution d'une méthode par un thread
    Par melleb dans le forum C#
    Réponses: 1
    Dernier message: 18/09/2008, 11h21
  3. [Thread] appel de méthodes non-synchronized dans une méthode synchronized
    Par dr23fr dans le forum Concurrence et multi-thread
    Réponses: 1
    Dernier message: 24/06/2008, 22h47
  4. Réponses: 3
    Dernier message: 19/03/2008, 09h38
  5. Exécution d'un Thread dans une méthode statique
    Par barbiche dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 03/05/2007, 14h25

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