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


Sujet :

Concurrence et multi-thread Java

  1. #1
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    220
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 220
    Par défaut problème de thread
    Bonjour,

    Je dois faire une simulation de routeurs... et mon problème est qu'un routeur ne peut envoyer maximum qu'un paquet LSP par seconde. Que faire? qd je met un wait(1000), les threads attendent 1seconde mais redémarre quasi en meme tps. Il faudrait qu'elle démarre une seconde l'une apres l'autre. Que faire?

    Voici ce que j'ai comme résultat des LSP
    LSP R2 1175799697796 R1 1 R3 9
    LSP R2 1175799697796 R1 1 R3 9
    LSP R3 1175799697812 R2 1 R1 9
    LSP R3 1175799697828 R2 1 R1 9
    LSP R1 1175799697828 R2 1 R3 9
    LSP R1 1175799697828 R2 1 R3 9
    Le 2ème champs est le routeur émetteur.
    Le 3ème est un champs de séquence (new Date().getTime()).

    J'ai 3 routeurs dans mon programme. Un routeur est une thread. Imaginons que chaque routeur à 2 voisins et qu'il faut une thread pour l'envoi vers chaque voisin. Ce qui fait 3 routeurs x 2 voisins = 6 threads. On peut remarquer pour les 2 premiers paquets que le numéro de séquence est le même alors que c'est le même routeur qui émet. Il faudrait pour le 1er paquet par ex. 1175799697796 et pour l'autre 1175799698796. qqn a une solution?? Il me semblait qu'avec une méthode synchronized, il n'y avait qu'une thread à la fois qui exécutait la méthode?

    Dans ma classe routeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    publicsynchronizedvoid trt() {
     
    ...
    // traitement sur chaque voisin
    for(int i = 0; i < vNeightbour.size(); ++i) {
       Neightbour n = vNeightbour.get(i);
       TSLSP = new ThreadSendLSP(name, vSocket.get(i), LSDB, vNeightbour, i);
       new Thread(TSLSP).start();
    }
    }
    Dans la classe ThreadSendLSP
    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
    publicsynchronizedvoid trt() {
    try {
    while(!socket.isFinished()) {
      if(socket.getSocket() != null) {
        InetAddress ipAddress = InetAddress.getByName(vNeightbour.get(indiceNeightbour).getIp());
        LSP LSPPacket = new LSP(name, vNeightbour, ipAddress, vNeightbour.get(indiceNeightbour).getUDPNeightbour());
        socket.getSocket().send(LSPPacket.getPacket());
      }
    }
    catch (SocketException e) {
    System.err.println("Fermeture inattendue sur une socket");
    }
    catch (IOException e) {
    System.err.println("Problème à envoie d'un paquet");
    }
    }

  2. #2
    Membre chevronné Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Par défaut
    Citation Envoyé par samplaid
    Bonjour,

    Je dois faire une simulation de routeurs... et mon problème est qu'un routeur ne peut envoyer maximum qu'un paquet LSP par seconde. Que faire? qd je met un wait(1000), les threads attendent 1seconde mais redémarre quasi en meme tps. Il faudrait qu'elle démarre une seconde l'une apres l'autre. Que faire?
    (...)
    Dans ma classe routeur:
    ainsi trt synchronizee:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public synchronized void trt() {
     
    ...
    // traitement sur chaque voisin
    for(int i = 0; i < vNeightbour.size(); ++i) {
       Neightbour n = vNeightbour.get(i);
       TSLSP = new ThreadSendLSP(name, vSocket.get(i), LSDB, vNeightbour, i);
       new Thread(TSLSP).start();
       // ici tu peux faire une pause =)
       Thread.sleep(1000);
    }
    }
    (...)

  3. #3
    Membre expérimenté
    Inscrit en
    Janvier 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 257
    Par défaut
    Salut,

    Sinon si tu veux tu peux aussi utiliser un pool de timer qui aurai un timer fixer a la seconde. Ainsi, toute les seconde précisement ton timer se déclencherait et effectuerai l'opération que tu souhaite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MyTimer = new Timer();
    MyTimer.scheduleAtFixedRate(new TaskToExecute(), 0, 1000);

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

Discussions similaires

  1. Problème de thread : Plus de ressources système
    Par OliverSleep dans le forum C++Builder
    Réponses: 17
    Dernier message: 07/02/2006, 15h35
  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