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 :

Comment stocker des threads dans une liste?


Sujet :

Concurrence et multi-thread Java

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 56
    Points : 52
    Points
    52
    Par défaut Comment stocker des threads dans une liste?
    Bonjour,
    j'aimerai stocker des threads dans une liste pour pouvoir acceder a ceux-ci a tous moment, le soucis ces que je n'arrive pas a stocker ces threads dans une liste puis les recuperers :s , voici mon code:
    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
     
    package servermsn;
     
     
    import java.util.ArrayList;
    import java.util.LinkedList;
    import java.util.List;
     
    class gestionList{
        Thread _t;
          List<Object> _connecte = new ArrayList<Object>();
      List<Object> _listContact = new LinkedList<Object>();
      List<Object> _listThread = new LinkedList<Object>();
      synchronized public void connecte(String login,Thread t)
          {
          _t=t;
              System.out.println("l'id du thread est:"+_t.getId());
              _t.setName(login);
              _listThread.add(_t);
               _connecte.add(login);
          }
          synchronized public void listContactConnecte(String login){
          }
      synchronized public void rechercheList(String login)
      {
          Thread temp;
          for(int i=0;i<_listThread.size();i++){
              temp=_listThread.get(i);
             //temp.getName();
     
          }
      }
    }
    J'aurai aussi une autre question, en realite je stock les threads car mon application utilise les sockets et les threads, j'aimerai communiquer avec un client sur un autre threads, le seul moyen de communiquer avec l'autre client est d'envoyer des données via le private PrintWriter _out.
    J'initialise le PrintWriter _out dans mon thread, via ce thread est-il possible de remonter jusqu'a la variable _out?(en ayant seulement acces a la variable Thread _t)

    Ces difficiles a expliquer j'espere avoir été assez clair
    Merci d'avance pour l'aide

  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
    je suppose que ton compilateur bute sur
    temp=_listThread.get(i);



    ce qui est normal puisque tu a déclaré _listThread comme étant une liste d'objet, le compilateur n'a aucune raison de supposer qu'on va lui retourner un Thread et pas un Brol


    remplace ce bout de code et ca devrais aller:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
          List<String> _connecte = new ArrayList<String>();
      List<Object> _listContact = new LinkedList<Object>();
      List<Thread> _listThread = new LinkedList<Thread>();

  3. #3
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 283
    Points : 380
    Points
    380
    Par défaut
    Citation Envoyé par Zoners Voir le message
    Bonjour,
    J'aurai aussi une autre question, en realite je stock les threads car mon application utilise les sockets et les threads, j'aimerai communiquer avec un client sur un autre threads, le seul moyen de communiquer avec l'autre client est d'envoyer des données via le private PrintWriter _out.
    J'initialise le PrintWriter _out dans mon thread, via ce thread est-il possible de remonter jusqu'a la variable _out?(en ayant seulement acces a la variable Thread _t)

    Ces difficiles a expliquer j'espere avoir été assez clair
    Merci d'avance pour l'aide
    Bonsoir,

    Tu veux faire correspondre une connexion avec un login. Je suppose qu'une HashMap pourrais t'aider.
    Fait bien attention à ce que tu fait correspondre à ton login. Le thread n'est pas vraiment utile, ta variable "_out" l'est bien plus.

    Prends une feuille, un crayon et écrit tout ce que tu peux retrouver sur une personne à partir uniquement de son pseudo. Relis cette liste et entoure ce dont tu as besoin. Ce sont des méthodes aussi basiques qui font avancer un programme plus vite.

    A plus

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 56
    Points : 52
    Points
    52
    Par défaut
    Tous d'abord merci a tous les deux pour vous reponses .
    J'ai apporté les corrections necessaire tchize_ merci
    Ces effectivement ce que je veus faire Grimly, correspondre un login avec une connexion.
    Je suis tous a fais d'accord sur le faite que la variable _out est indispensable pour dialoguer avec le client que je souhaite, d'ou ma question au debut si il était possible de recuperer cette variable via Thread _thread par exemple, mais je ne pense pas que cela soit possible :p.
    Je viens de regarder pour le hashmap et ca me semble être ce qu'il me faut, mais je me demande si il ne serait pas mieux d'utiliser hashtable qui lui est synchronisé contrairement aux hashmap?

    Le probleme que j'ai aussi, ces que avec le out je peus ecrire au client qui se trouverait sur un thread quelconque mais je ne sais pas recevoir de donnée de ce client, dois-je alors aussi stocker la variable _in dans une liste?

    voici la correction de mon code:
    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
    class gestionList{
        Thread _t;
          List<String> _connecte = new ArrayList<String>();
      List<Object> _listContact = new LinkedList<Object>();
      List<Thread> _listThread = new LinkedList<Thread>();
      Hashtable listeThread = new Hashtable();
      synchronized public void connecte(String login,PrintWriter out)
          {
     
     
               listeThread.put(login, out);
          }
          synchronized public void listContactConnecte(String login){
          }
      synchronized public void rechercheList(String login)
      {
          PrintWriter out;
              out=(PrintWriter) listeThread.get(login);
      }
    }
    Encore merci pour l'aide apportée

Discussions similaires

  1. Comment supprimer des "0" dans une liste
    Par solorac dans le forum Excel
    Réponses: 4
    Dernier message: 04/09/2007, 12h22
  2. comment ajouter des élements dans une liste ?
    Par ryoussef19 dans le forum VC++ .NET
    Réponses: 5
    Dernier message: 15/06/2007, 16h02
  3. Comment Manipuler des objets dans une liste de type TList ?
    Par PadawanDuDelphi dans le forum Delphi
    Réponses: 1
    Dernier message: 02/11/2006, 15h40
  4. Comment stocker des images dans une base de données ?
    Par [Silk] dans le forum Bases de données
    Réponses: 4
    Dernier message: 21/07/2005, 11h29
  5. [langage] Comment rajouter des champs dans une liste
    Par toto_titi dans le forum Langage
    Réponses: 4
    Dernier message: 28/08/2003, 14h09

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