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 dans une fonction


Sujet :

Concurrence et multi-thread Java

  1. #1
    Membre du Club
    Inscrit en
    Août 2008
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 184
    Points : 49
    Points
    49
    Par défaut Thread dans une fonction
    Bonjour,

    J'ai quelques questions par rapport aux Thread :

    1)J'ai une méthode où je lance un thread, ma question est la suivante , est ce que je sort de cette fonction dès que le thread est lancé ou elle attend que le thread se termine.
    2) comment faire pour que dès que je lance le thread je sorts de ma fonction (J'attends pas que le thread termine son travail).

    3) comment recuperer un retour d'une fonction qui est dans une classe thread?

    Merci de m'aider sur ce point.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    1) ben elle continue, elle attends pas, sinon il n'y aurais aucun intérêt à utiliser des thread
    2) voir 1)
    3) peux-tu détailler, je comprend pas la question la

  3. #3
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 075
    Points : 7 981
    Points
    7 981
    Par défaut
    Citation Envoyé par cyclopsnet Voir le message
    3) comment recuperer un retour d'une fonction qui est dans une classe thread?
    Je suppose que tu vx dire, recuperer une (ou des valeurs) calculées par le thread une fois que celui ci a terminé.

    Tu px utiliser un simple truc ainsi :

    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
    public leThread extends Thread
    {
    	String resultat;
    	public void run ()
    	{
    		// Le code de calcul ou autres
    		// Mets le resulatt dans la variable.
    		resultat ="Super";
    	}
     
    	public synchronized String getResultat()
    	{
    		return resultat;
    	}	
    }
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre du Club
    Inscrit en
    Août 2008
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 184
    Points : 49
    Points
    49
    Par défaut
    Merci

  5. #5
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    @wax78 :

    Le synchronized est inutile ici puisqu'il n'y a qu'une simple affectation. De plus il n'y a pas de synchronization dans le code du run() donc c'est d'autant plus inutile. Par contre il serait souhaitable de déclarer l'attribut "resultat" en volatile, afin d'éviter des optimisations hasardeuses...



    A noter qu'avec Java 5.0 on peut tout simplement utiliser les Callable<T>/Future<T> :
    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 static Future<String> method() {
            /*
             * On crée un objet FutureTask, qui représente notre tâche via un Callable.
             * Ce dernier à l'avantage de proposer un type de retour paramétrable,
             * et de renvoyer des exceptions :D
             */
            FutureTask<String> task = new FutureTask<String>(new Callable<String>() {
                @Override
                public String call() throws Exception {
                    // On simule un traitement :
                    Thread.sleep(5000);
                    return "Super";
                }
            });
     
            /*
             * On lance un thread associé à cette tâche.
             */
            new Thread(task, "MyThread").start();
     
            /*
             * On retourne la tâche en tant qu'objet "Future".
             * Cela nous permettra :
             *     - D'interrompre la tâche : cancel(true)
             *  - De connaitre son état : isDone() / isCancelled()
             *  - De récupérer le resultat : get()
             */
            return task;
        }

    a++

  6. #6
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 075
    Points : 7 981
    Points
    7 981
    Par défaut
    Pour le synchronized je n'ai qu'une seule chose a dire pour ma défence :

    Merci eclipse (generate getters/setters avec le case a decocher synchronized, voila ce qui arrive qd on va trop vite)
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Thread d'une fonction membre dans une fonction membre
    Par virtual_bug dans le forum Threads & Processus
    Réponses: 2
    Dernier message: 19/03/2014, 21h49
  2. Thread -> Utiliser Synchronize() dans une fonction
    Par Futixu dans le forum C++Builder
    Réponses: 5
    Dernier message: 26/01/2007, 13h13
  3. Thread avec une fonction membre d'une classe
    Par SteelBox dans le forum Windows
    Réponses: 6
    Dernier message: 01/03/2004, 01h15
  4. [Postgresql]Connecter à une autre base dans une fonction
    Par alex2205 dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/05/2003, 11h30
  5. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14

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