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

Langage Java Discussion :

synchronisaton des thread


Sujet :

Langage Java

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    nabila.abdessaied
    Invité(e)
    Par défaut
    salut,
    je veux implémenter ça
    une classe qui modélise un évènement appelé event
    cette classe implémente ces deux méthodes :waiting() and wakeup()
    nous avons juste un seul event et plusieurs thread qui partagent ce même évènement
    et on a un seul thread qui va notifier ces threads qui attendent
    il va faire wakeup de event alors tous les thread sortent de waiting

    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
    class a {
    public int a;=0;
    event e=new event();
    public a(){
    callThread(); //creation thread 1
    callThread(); //creation thread 2
    callThread(); //creation thread 3
    callThread(); //creation thread 4
    callThread(); //creation thread 5
    .
    .
    //nombre indefini de thread qui font le wait cad c pa statique on ne le sait pas
    .
    .
    //ce thread va notifier tous les autre thread
    new Thread (){
    run(){
    a=5;
    e.wakeup()
    }}.start();
    }
     
    //cette methode va creer un thread qui va attendre la notification de l//'evenement avant
    //et apres il va afficher le contenue de a
    private void callThread(){
    new Thread (){
    run(){
    e.waitng();
    System.out.println(a);
    }}.start();
    }
    normalement tous les thread ne vont pas afficher le contenu de a que après la notification
    mon problème c'est que dans cet exemple il y a un seul qui peut voir la notification
    et sort de la phase de d'attente
    parce que la notification fait le flag vaut true donc un seul tient compte de cette modification et sort de wait et modifient le flag a false donc les autres ne tiennent pas compte de cette modification et restent dans l'attente infinie
    voila la classe event

    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
    public final class Event {
    /**
    * variable used to store the notification if it takes place
    * before being expected
    */
    private boolean status = false;
     
    public final synchronized void waiting() {
    while (status == false ) {
    try {
    wait();
    }
    catch (InterruptedException e) {
    }
    }
    status = false ;
    }
    // notify all waits on this event
    public final synchronized void wakeUp() {
    status = true;
    notifyAll();
    }
     
     
    }
    après j'ai eu cette idée c'est de créer dans la classe event un tableau d'évènement
    si un thread veut entrer dans waiting il va créer un nouveau évènement et le store dans le tableau et ensuite il fait le wait sur cet évènement
    après si le thread de notification envoi la notification il va faire ce qui suit notifier tous les évènements de tableau
    mais il reste un souci
    c'est que on sait jamais si on fait tout les wait avant d'envoyer la notification
    par exemple si on a 60 thread qui vont entrer en wait
    il y a seulement 30 qui entrent
    après la notification aura lieu
    donc notification de tous les élément de tableau c'est à dire 30 thread seront notifiées et les autres même si il vont entrer après en wait il n'y a aucun thread qui va faire la notification
    donc si je sais pas le nombre de thread qui vont faire le wait
    comment je peux empêcher le thread qui envoie la notification d'envoyer la notification avant que tous les thread ont effectué les wait ?

    merci de me répondre
    Dernière modification par mlny84 ; 06/04/2009 à 09h44. Motif: syntaxe + SMS

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/02/2004, 12h50
  2. Une question à propos des thread
    Par tscoops dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/11/2003, 14h03
  3. Variable globale / Propriété des threads
    Par rgarnier dans le forum XMLRAD
    Réponses: 4
    Dernier message: 03/10/2003, 10h49
  4. [reseaux] Gestion des threads en perl
    Par totox17 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 28/11/2002, 09h40
  5. Programmer des threads
    Par haypo dans le forum C
    Réponses: 6
    Dernier message: 02/07/2002, 13h53

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