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 :

Quelques question sur les threads


Sujet :

Concurrence et multi-thread Java

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 56
    Par défaut Quelques question sur les threads
    Bonjour,
    J'aurai quelques questions sur les Threads. J'ai utilisé le tutorial ici.

    Je dois creer un server-client et faire une sorte de chat. Ce tuto m'a été utile pour creer un nouveau Thread a chaque connexion.
    Mais la question que je me pose vu que dans mon projet j'ai pas mal de methodes et objet, dois-je lancer tous ceux-ci a partir de la fonction run(en fesant t1.start).
    Ou alors une fois la fonction run lancée j'utilise le même thread pour lancer toute mes autres classes(ex: Thread t1=new Thead();t1.start;t1.mafonction).
    J'aurai aussi voulu avoir une confirmation, dans le tuto , il explique que le try,catch,finally-->finally survient surtout quand le client se deconnecte, es ce bien le cas a tous les coups? (car j'ai besoin de faire cette verification)

    Ensuite si j'ai bien compris il faut proteger les methodes , et le meilleur moyen et qui me semble assez facile c'est en utilisant le mots clés "synchronized", qu'en pensez vous?

    Merci d'avance pour vos reponses et votre aide

  2. #2
    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 : 46
    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
    tu fais un appel à start par thread que tu veux lancer. Synchronized empeche deux thread d'accéder simultanément à une ressource protégée. Pour le reste, j'ai rien compris à ta question

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 56
    Par défaut
    Heu merci pour ta reponses :p mais ca m'aide pas encore suffisamment :s.
    Pour avoir une meilleur idée de ce que je veus dire voici un exemple(j'ai mis le strict minimum ds l'exemple :p):
    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 Test{
    Object object1=new Object();
    Object object2=new Object();
    Object object3=new Object();
    }
    class Server implements Runnable
    {
       Thread thread1=new Thread();
       thread1.start();
       public void run()
       {
        Test test1=new Test(); 
        Test test2=new Test();
        test1.object1.fonctionx;
        test2.object2.fonctiony;
       }
    }
    OU dois-je faire ceci:
    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
     
    class test{
    Object object1=new Object();
    Object object2=new Object();
    Object object3=new Object();
    }
    class server implements Runnable
    {
       Thread thread1=new Thread();
       thread1.start();
       Test test1=new Test(); 
       Test test2=new Test();
       thread1.test1.object1.fonctionx;   
    public void run()
       {
        //
       }
     
    }

  4. #4
    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 : 46
    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
    Aucun des deux n'est bon, dans les deux cas ton thread ne fait rien. C'est dans le run() du thread ou le run() du runnable passé en paramètre à new Thread que tu fait les opération qui seront dédiées à ce threaed et nulle part ailleurs.

    Et aucun de tes code ne compilera, on ne met pas de code en dehors d'une méthode en java

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 56
    Par défaut
    ouch :p y'a des jours ou je ferais mieux de ne rien programmer :p.
    Quel erreur monumentale pour avoir mis le code en dehors d'une methode, mais j'ai codé ca sur le vif sans reflechir :p.

    Pour revenir au probleme je pense avoir plus ou moin compris, pourriez-vous me dires, si ceci fonctionne maintenant:

    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
    class Test{
    Objecte object1=new Objecte();
    Objecte object2=new Objecte();
    Objecte object3=new Objecte();
    }
    class Server implements Runnable
    {
        public void lancement()
        {
            Thread t1=new Thread();
            t1.start();
        }
     
       public void run()
       {
        Test test1=new Test(); 
        test1.object1.fonctionx();
       }
    }
    class Objecte{
        public void fonctionx(){
     
        }
        public void fonctiony(){
     
        }
    }

  6. #6
    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 : 46
    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
    comme déjà dit, ton Thread t1 ne fait rien.

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 56
    Par défaut
    Je pense avoir enfin compris :p , j'ai relu un peu les tuto et j'ai compris le probleme que j'avais(du moins je l'espere :p).
    Es ce que vous pourriez me dire si ces modifications sont correctes?
    (encore merci pour toute l'aide apportée )
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    class Test{
    Objecte object1=new Objecte();
    Objecte object2=new Objecte();
    Objecte object3=new Objecte();
    }
    class ServerThread implements Runnable
    {
        private Thread nouveauThread;
        ServerThread()
        {
            nouveauThread=new Thread(this);
            nouveauThread.start();
     
        }
       public void run()
       {
        Test test1=new Test();
        test1.object1.fonctionx();
       }
    }
    public class main()
    {
        public main()
        {
            new ServerThread();
        }
    }
    class Objecte{
        public void fonctionx(){
     
        }
        public void fonctiony(){
     
        }
    }
     
    OU
     
    class Test{
    Objecte object1=new Objecte();
    Objecte object2=new Objecte();
    Objecte object3=new Objecte();
    }
    class ServerThread extends Thread
    {
       public void run()
       {
        Test test1=new Test();
        test1.object1.fonctionx();
       }
    }
    public class main()
    {
        public main()
        {
            ServerThread nouveauThread=new ServerThread();
            nouveauThread.start();
        }
    }
    class Objecte{
        public void fonctionx(){
     
        }
        public void fonctiony(){
     
        }
    }

  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 : 46
    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
    dans els deux cas, tu démarre bien un nouveau thread qui effectue les opérations avec perosnellement une préférence pour le deuxième code qui utilise correctement les extends Thread.

  9. #9
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 56
    Par défaut
    Merci beaucoup d'avoir pris le temps de m'aider , j'ai enfin compris comment ca fonctionne . Encore un grand merci

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

Discussions similaires

  1. Quelques questions sur les annuaires ldap
    Par rvfranck dans le forum Réseau
    Réponses: 7
    Dernier message: 15/08/2006, 02h41
  2. Quelques questions sur les LOB
    Par Wurlitzer dans le forum Oracle
    Réponses: 2
    Dernier message: 14/06/2006, 17h32
  3. Quelques questions sur les threads
    Par benj63 dans le forum C++Builder
    Réponses: 28
    Dernier message: 21/11/2005, 13h27
  4. Question sur les threads
    Par Linio dans le forum Concurrence et multi-thread
    Réponses: 10
    Dernier message: 21/10/2005, 09h08
  5. Question sur les threads
    Par nicolas66 dans le forum MFC
    Réponses: 4
    Dernier message: 03/06/2005, 20h57

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