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]Lancement et desctruction automatique


Sujet :

Concurrence et multi-thread Java

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 25
    Points : 18
    Points
    18
    Par défaut [Thread]Lancement et desctruction automatique
    Salut,

    J'ai une librairie qui contient une seule classe avec une seule méthode.
    On peut donc l'utiliser en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MyClass myobject = new MyClass();
    myobject.myMethod();
    Cette méthode effectue un traitement BD et est donc bloquante, sans parler du cas ou l'accès BD foire, ce qui serait dramatique pour les applis (temps réel) qui utilisent ma lib.

    Je voudrais donc remplacer mon traitement BD par le lancement d'un Thread qui effectue ce traitement de façon autonome.
    Je peux donc définir ma méthode avec quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void myMethod()
    {
    	Thread mythread = new Thread() {
    		public void run()
    		{
    			/* Mon traitement BD */
    			...
    		}
    	}
    	mythread.start();
    }
    Mais après avoir parcouru les tuts et forums, je me pose deux questions :
    Premièrement, le thread va se trouvé dans l'état mort à la fin du traitement (pas de boucle while), mais va-t'il être récupéré par le garbage collector automatiquement ?
    Deuxièmement, mon objet MyObject va être détruit après le retour de la méthode myMethod() et donc potentiellement avant la fin du traitement du thread. Est-ce que le thread va tout de même continuer son traitement ?

    Voila, j'espère avoir été clair.

    Merci à ceux qui maîtrisent les threads de m'apporter des précisions.

  2. #2
    En attente de confirmation mail
    Inscrit en
    Octobre 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    généralement qd ton thread aura fini sa focntion run il devient

    isAlive() == false


    donc normalement ton myClass sera détruit

    pour être sur tu peux 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
    17
    18
    19
     
    public MyThreadClass extends Thread
    {
        public void run()
        {
             MyClass  myClass = new MyClass();
             myClass.myMethod();
     
             myClass               = null;
        }
     
        public static void main(String[] strParam)
        {
             MyThreadClass myThread = new MyThreadClass();
             myThread.start();
     
             myThread                        = null;
        }
    }
    les "= null" facilite le travail du GC

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 25
    Points : 18
    Points
    18
    Par défaut
    Merci Fred, mais ça ne répond pas vraiment à mes question...

    Tu mets l'appel à myMethod() dans un thread alors que je voudrais que ce soit la méthode qui crée un thread (donc l'inverse).

    Peut-être me suis-je mal expliqué...

  4. #4
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 68
    Points : 72
    Points
    72
    Par défaut Re: [Thread]Lancement et desctruction automatique
    Citation Envoyé par Vignot
    Premièrement, le thread va se trouvé dans l'état mort à la fin du traitement (pas de boucle while), mais va-t'il être récupéré par le garbage collector automatiquement ?
    Oui, il sera récupéré. Il faudra surtout penser à fermer les accés aux bases de données.
    Citation Envoyé par Vignot
    Deuxièmement, mon objet MyObject va être détruit après le retour de la méthode myMethod() et donc potentiellement avant la fin du traitement du thread. Est-ce que le thread va tout de même continuer son traitement ?
    Oui, ça va continuer.

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 25
    Points : 18
    Points
    18
    Par défaut
    Merci tileffeleauzed !

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

Discussions similaires

  1. Problème Thread lancement de plusieurs Thread
    Par amath1 dans le forum Android
    Réponses: 1
    Dernier message: 30/01/2013, 23h51
  2. comment créer un thread qui s'exécute automatiquement sans arrêt
    Par oumay dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 21/09/2010, 11h29
  3. Non lancement de macro automatique
    Par babybell dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/10/2008, 14h33
  4. [Thread]Lancement à heure précise
    Par Rom1984 dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 23/08/2007, 10h03
  5. Réponses: 1
    Dernier message: 09/08/2006, 16h04

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