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 :

Problème de thread: isAlive when sleeping ?


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
    Août 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2007
    Messages : 71
    Par défaut Problème de thread: isAlive when sleeping ?
    Bonjour à tous,

    je suis en train de travailler sur une application multithreads, que je suis en train de tester. Pour cela, je souhaite faire dormir un thread à l'aide de la méthode sleep, et tester s'il est toujours vivant... (cela s'inscrit dans un processus bien plus complexe).

    Le problème c'est que lorsque mon controller appelle la méthode isAlive sur ce thread afin de savoir s'il est toujours en train de tourner (ce qui est le cas, j'ai vérifié), la méthode renvoie false.

    Comment fonctionne la méthode isAlive ? La méthode sleep passe-t-elle le thread dans un état bloqué ? Comment feriez-vous pour faire tourner un thread pendant plus de 10sec, sans faire tomber le serveur, afin que le controller puisse vérifier qu'il tourne toujours ?

    Merci par avance,
    MiniMarch'

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 43
    Par défaut
    Extrait de javadoc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	stop()
              Deprecated. This method is inherently unsafe. Stopping a thread with Thread.stop causes it to unlock all of the monitors that it has locked (as a natural consequence of the unchecked ThreadDeath exception propagating up the stack). If any of the objects previously protected by these monitors were in an inconsistent state, the damaged objects become visible to other threads, potentially resulting in arbitrary behavior. Many uses of stop should be replaced by code that simply modifies some variable to indicate that the target thread should stop running. The target thread should check this variable regularly, and return from its run method in an orderly fashion if the variable indicates that it is to stop running. If the target thread waits for long periods (on a condition variable, for example), the interrupt method should be used to interrupt the wait. For more information, see Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?.
    Methode simple utilise un boolean dans ton thread pour l'arreter.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2007
    Messages : 71
    Par défaut
    Merci pour la réponse!

    Pour stopper, je n'ai pas de problème en utilisant thread.interrupt().

    En revanche, je souhaite savoir, avant d'appeler la méthode, si le thread a fini l'exécution de sa méthode run().

    La raison est simple: j'ai en réalité un ensemble de threads. Si l'un n'a pas terminé sa fonction run(), c'est qu'il est en timeout, et je dois générer un rapport propre à ce thread.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 43
    Par défaut
    Je comprends, en fait en thread peut etre soit viant soit interupted, soit deamon. Le soit est important car si il est interupted il n'est pas vivant
    Pourquoi ne pas faire un systeme de balises au lieu de tester des interruptions de Thread?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2007
    Messages : 71
    Par défaut
    En fait j'y ai pensé et c'est probablement ce que je vais finir par faire. Je voulais éviter de compliquer davantage l'application (qui passe déjà par des controllers de threads, avec réponse asynchrone).

    C'est dommage qu'il n'y ait pas moyen d'avoir accès à l'état du thread plus facilement que ça...

    Je posterai un message pour signaler quel a été mon choix final. Merci pour les conseils.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 43
    Par défaut
    Ouai je peux pas t'aider plus, peut être que des reponses arriveront. Bon courage

Discussions similaires

  1. Problème avec thread.sleep
    Par e.londres dans le forum Android
    Réponses: 3
    Dernier message: 02/09/2011, 16h19
  2. [VB.NET] Problème de Thread
    Par Sadneth dans le forum ASP.NET
    Réponses: 26
    Dernier message: 31/01/2006, 10h12
  3. Problème synchronisation threads
    Par Linio dans le forum Concurrence et multi-thread
    Réponses: 19
    Dernier message: 11/01/2006, 16h57
  4. [MFC] Problème de Threads + Timers
    Par Invité dans le forum MFC
    Réponses: 8
    Dernier message: 30/11/2005, 10h51
  5. [VC++6][DX9] Problème de thread lors d'un blit ...
    Par grandjouff dans le forum DirectX
    Réponses: 2
    Dernier message: 12/06/2003, 22h22

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