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 :

[Thread] Relancer un thread.


Sujet :

Concurrence et multi-thread Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Par défaut [Thread] Relancer un thread.
    Bonjour.

    J'ai un thread t1 que je lance via la méthode t1.start();

    Alors que celui-ci est terminé, je veux que l'on puisse relancer ce même thread (donc la même instance). Mais refaire t1.start() (alors que celui-ci est terminé, j'insite ^^) cela me retourne une java.lang.IllegalThreadStateException

    Est ce qu'il y'a un moyen de relancer une deuxième fois le même thread ou bien ej dois implémenter mes propres mécanismes ?

  2. #2
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 679
    Par défaut
    Non un thread ne peux être lancé qu'une fois.

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Par défaut
    *ouned*

    Bon bah plus pas qu'implémenter un mécanisme interne au thread alors ^^
    Merci bien.

    Juste par curiosité, pourquoi une telle limitation ?

    Réeffectuer une autre instance en soit possible, mais serait assez lourd.

  4. #4
    Membre émérite Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Par défaut
    Bonjour,
    en effet dans l'API il est dit qu'on ne peut pas relancer un Thread.
    Tu vas devoir ré-instancier un autre Thread en lui passant les bons paramètres.

  5. #5
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    Question bete,

    pourquoi ne fait tu pas une boucle à l'intérieur de ta méthode start?

  6. #6
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Par défaut
    Citation Envoyé par jabbounet Voir le message
    Question bete,

    pourquoi ne fait tu pas une boucle à l'intérieur de ta méthode start?
    C'est ce que je pensais faire, mais je réalise que j'ai besoin que le thread s'arrete normalement, étant donné que j'utilise la méthode join.
    Alors je pourrais réimplementer le join, mais bon ca commence à devenir compliquer quand même ...

  7. #7
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    si conserver le même thread est une contrainte importante, dans ce cas, tu peux très bien mettre le résultat dans une queue et le faire dépiler par le thread qui attend le résultat quand il y'a quelque chose dedans.
    ou faire quelque chose d'approchant.


    Autrement si tu as beaucoup de parallélisme dans ton appli tu peux opter pour une approche de type threadpool (si cela est adapté).

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Sinon au lieu d'utiliser un Thread, tu utilise un Runnable pour ta classe. Ensuite tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Thread t = new Thread(leRunnableEnQuestion);
    t.start();
    ....
    t.join();
    Thread ne peux pas être relancé car cette classe ne se nettoie pas à la fin du run hors elle contient, a priori, des infos spécifique pour le lancement d'un thread système. Je suppose que les OS non plus n'apprécient pas qu'un thread déterminé se lance plusieurs fois

  9. #9
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Sinon au lieu d'utiliser un Thread, tu utilise un Runnable pour ta classe. Ensuite tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Thread t = new Thread(leRunnableEnQuestion);
    t.start();
    ....
    t.join();
    Thread ne peux pas être relancé car cette classe ne se nettoie pas à la fin du run hors elle contient, a priori, des infos spécifique pour le lancement d'un thread système. Je suppose que les OS non plus n'apprécient pas qu'un thread déterminé se lance plusieurs fois
    Ahh pas bete ca. Merci bien je pars là dessus ^^

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

Discussions similaires

  1. relancer un Thread une fois mort ?
    Par altahir007 dans le forum VB.NET
    Réponses: 4
    Dernier message: 01/01/2013, 17h06
  2. Relancer un thread proprement
    Par eclesia dans le forum Concurrence et multi-thread
    Réponses: 4
    Dernier message: 04/01/2007, 19h13
  3. [delphi] Thread relancement
    Par Drikcé dans le forum Delphi
    Réponses: 4
    Dernier message: 13/11/2006, 10h42
  4. [Thread]Relancer un thread
    Par Pill_S dans le forum Concurrence et multi-thread
    Réponses: 9
    Dernier message: 28/04/2005, 20h41
  5. Réponses: 3
    Dernier message: 11/02/2004, 12h50

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