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 :

restart un daemonthread


Sujet :

Java

Vue hybride

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 165
    Par défaut restart un daemonthread
    Bonjour,

    Je fais un serveur en java (quelque chose de simple pour mes cours) et j'ai une interface graphique où je peux changer les paramètres (le port par exemple).

    Donc pour se faire je dois d'abord terminer mon daemonthread (qui gère les connexions). J'emploie une boucle avec une variable boolean en condition (classique) ensuite je change la variable à "false" et le thread se termine tout seul proprement.
    Maintenant ma question : Comment puis-je restarter mon thread ? Employer la méthode "start()" renvoie IllegalThreadStateException et une nouvelle instance renvoie Address already in use: JVM_Bind.

    Que puis-je faire ?

    Cordialement,

    rXp>!<

  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,


    Tu ne peux pas redémarrer un thread. Tu dois simplement relancer la tâche dans un autre thread.

    a++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 165
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,


    Tu ne peux pas redémarrer un thread. Tu dois simplement relancer la tâche dans un autre thread.

    a++
    Donc impossible à faire comme je fais.
    Dois-je opter pour une double boucle ? Une boucle gardant le thread en vie et l'autre pour la garder connecté ?
    Comme cela si je quitte la boucle connecté, l'autre est toujours là donc je peux faire mes changements et reentrer dans la boucle de connexion une fois les changements fait ?

    Cordialement,

    rXp>!<

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 338
    Par défaut
    Tu peux utiliser une boucle infinie dans la méthode run de ton thread.
    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
    class MyClass
     final Object lock = new Object();
     
     //reste de ta classe
     
     class MyDaemon extends Thread {
       //...
       void run() {
         for(;;) {
         //faire un traitement
         lock.wait();
       }
     
       void restart() {
         lock.notify();
       }
    }

  5. #5
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Citation Envoyé par hibour Voir le message
    Tu peux utiliser une boucle infinie dans la méthode run de ton thread.
    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
    class MyClass
     final Object lock = new Object();
     
     //reste de ta classe
     
     class MyDaemon extends Thread {
       //...
       void run() {
         for(;;) {
         //faire un traitement
         lock.wait();
       }
     
       void restart() {
         lock.notify();
       }
    }
    Les boucles infinies c'est mal !

    Au lieu de mettre le code dans la méthode run() d'un thread, il est préférable d'utiliser un Runnable puis d'instancier et lancer un thread avec celui-ci.
    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
    26
    27
    28
    29
    public class MyServer implements Runnable {
     
        private boolean doRun = false;
        private boolean running = false;
     
        public synchronized void start() {
            if(!running) {
                running = true;
                doRun = true;
                new Thread(this).start();
            }
        }
     
        public synchronized void stop() {
            doRun = false;
        }
     
        public boolean isRunning() {
            return running;
        }
     
        @Override
        public void run() {
            while(doRun) {
                 // do stuff
            }
            running = false;
        }
    }
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Citation Envoyé par le y@m's Voir le message
    Les boucles infinies c'est mal !
    Dans le cas d'un daemon thread, il n'est guère d'autre choix.

    Il suffit juste de penser à déclarer sont Thread en tant que daemon en appelant la méthode setDaemon(true);

  7. #7
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Citation Envoyé par sinok Voir le message
    Dans le cas d'un daemon thread, il n'est guère d'autre choix.
    Je ne vois pas en quoi le fait qu'il y ait une condition de sortie dans la boucle gène pour un daemon thread.
    Si on veut à un moment donné arrêter proprement le thread, qu'il soit deamon ou pas, une boucle infini c'est pas glop.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

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

Discussions similaires

  1. PHP + Apache restart
    Par Batin63 dans le forum Apache
    Réponses: 1
    Dernier message: 28/08/2007, 15h00
  2. service automatic (restart)
    Par faddou dans le forum Windows XP
    Réponses: 1
    Dernier message: 24/05/2007, 10h42
  3. [SQL2000] Lignes de commande pour shutdown/restart du serveur
    Par Amnesiak dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/10/2006, 14h46
  4. [C#] Shutdown et Restart Windows
    Par xtream dans le forum Windows Forms
    Réponses: 2
    Dernier message: 26/08/2006, 21h29
  5. [SYBASE]restart serveur
    Par 6rose dans le forum Sybase
    Réponses: 4
    Dernier message: 19/06/2003, 10h00

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