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 :

Stopper une thread qui tourne à l'infini


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 10
    Par défaut Stopper une thread qui tourne à l'infini
    Bonjour je suis en train de faire une application J2EE JSF sous glassfish.
    J'ai une boutton pour lancer une thread qui vas boucler a l'infinie et une autre qui vas essayer de stopper cette thread.
    Le probléme est que je veux pas toucher a mon code métier mais juste interrompre mon thread par n'importe quel moyen méme dangereuse.voici mon 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
    21
    22
    23
    24
     
    package com.example.beans;
     
    import java.util.Random;
    import java.util.TimerTask;
     
     import org.apache.commons.lang.RandomStringUtils;
    import org.apache.log4j.Logger;
     
    import com.example.core.RandomUtils;
     
    public class MySimpleRunnableTask implements Runnable {
    private Logger logger = Logger.getLogger(MySimpleRunnableTask.class);
    @Override
    public void run() {
      /* i do not want to touch my code here*/
        int i = 1;
        while (i == 1) {
            String random = RandomStringUtils.random(3);
            logger.info(random);
        }
    }
     
      }
    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
    21
    22
    23
    24
    25
     
    @ManagedBean(name = "MainView")
    @SessionScoped
    public class MainView {
    private static Thread myThread;
     
    @SuppressWarnings({ "unchecked", "rawtypes", "deprecation" })
    public String startSimpleThread() throws SecurityException,
            NoSuchMethodException, InterruptedException {
     
        MySimpleRunnableTask mySimpleRunnableTask = new MySimpleRunnableTask();
     
        myThread = new Thread(mySimpleRunnableTask);
               myThread.start();
        return null;
     
    }
     
    @SuppressWarnings({ "unchecked", "rawtypes", "deprecation" })
    public String stopSimpleThread() throws SecurityException,
            NoSuchMethodException, InterruptedException {
        myThread.interrupt();
        return null;
     
    }
    j'ai partout recherché dans le net mais en vain et je sais bien qu'il existe une solution car je l'ai déja vue dans une application proprietaire.
    Merci

  2. #2
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,


    Dans le code de ton thread, remplaces ton while (i == 1) par ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (!isInterrupted())
    Ensuite il te suffira d'utiliser interrupt() sur ton thread...


    a++

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    En même temps, il a dit qu'il ne voulait pas y toucher, mais que ce n'est pas grave si la méthode est dangereuse.

    Je suggère de tuer glassfish avec un kill -9, puis de le redémarrer. Le thread sera ainsi arrêté. (Oui, je connais la méthode dépréciée qui permet de tenter d'arrêter un thread, mais elle rend Java très instable. Arrêter glassfish et le redémarrer est préférable à tout point de vue.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 10
    Par défaut
    bonjour tu m'a pas compris adiGuba.je vais t'expliquer
    j'ai le code suivant
    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
     
    package com.example.beans;
     
    import org.apache.commons.lang.RandomStringUtils;
     
    public class MyBusinessClass {
    	public static void myBusinessMethod() {
    		/* this method take a lot of time */
    		int i = 1;
    		while (i == 1) {
    			String random = RandomStringUtils.random(3);
     
    			System.out.println(random);
     
    		}
    	}
    }
    et voici mon runnable class
    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
     
    package com.example.beans;
     
    import java.util.Random;
    import java.util.TimerTask;
     
    import org.apache.commons.lang.RandomStringUtils;
    import org.apache.log4j.Logger;
     
    import com.example.core.RandomUtils;
     
    public class MySimpleRunnableTask implements Runnable {
    	private Logger logger = Logger.getLogger(MySimpleRunnableTask.class);
     
    	@Override
    	public void run() {
    		MyBusinessClass.myBusinessMethod();
     
    	}
    }

    j'ai cherché partout sur le net et j'ai rien trouvé

  5. #5
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 10
    Par défaut
    bonjour thelvin
    non je veux pas comme méme tuer le serveur glassfish juste arreter cette merdique thread pas plus.le probléme est que la solution existe et je l'ai vue par mes propres yeux dans une application proprietaire avec JDK 5

  6. #6
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    La solution c'est de modifier ta "myBusinessMethod" afin qu'elle gère les interruptions (ou un système similaire).

    C'est sûrement ce qui est utilisé par ton application propriétaire...


    a++

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par blacknight1985 Voir le message
    bonjour thelvin
    non je veux pas comme méme tuer le serveur glassfish juste arreter cette merdique thread pas plus.le probléme est que la solution existe et je l'ai vue par mes propres yeux dans une application proprietaire avec JDK 5
    Ce dont tu parles cause bien plus de problèmes que juste redémarrer glassfish. De toute façon je croyais que c'était pas grave s'il y a un risque.
    "Un risque" est un doux euphémisme pour décrire ce que tu demandes. C'est le chaos total à un moment absolument imprévisible.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonsoir,

    J'ai pas le lien pour jdk 5 mais c'est le même principe et à toi d'assumer risque:
    http://download.oracle.com/javase/1....precation.html
    La façon la plus propre c'est d'utilisé un flag (comme proposé par adiGuba plus haut)

    A+.

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

Discussions similaires

  1. Thread qui tourne en tâche de fond sur JBoss
    Par AnneB dans le forum Java EE
    Réponses: 2
    Dernier message: 14/06/2007, 13h11
  2. [vb6]MAJ sur une appli qui tourne 24h/24
    Par riesseg dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 25/04/2006, 22h49
  3. [Thread]Récupérer un Thread qui tourne
    Par thibaut dans le forum Concurrence et multi-thread
    Réponses: 3
    Dernier message: 09/02/2006, 11h43
  4. [VB.NET] Programmer une Application qui tourne sur un PDA?
    Par Bils dans le forum Windows Forms
    Réponses: 1
    Dernier message: 27/01/2006, 04h23
  5. Requete qui tourne à l'infini
    Par Sarrus dans le forum Langage SQL
    Réponses: 1
    Dernier message: 26/07/2005, 10h52

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