[Java] synchro entre thread: wait() et notify() -> pb [RESOLU]

synchro entre thread: wait() et notify() -> pb [RESOLU] [Java] - Java - Programmation

Marsh Posté le 17-12-2005 à 21:53:27    

salut
 
je tente (désespérement) de synchroniser 2 threads entre eux (l'un doit surveiller que l'autre arrive à terme)
j'essaie d'utiliser wait() et notify(), et que ce soit à l'exécution de l'une ou l'autre de ces méthodes (le wait() dans mon thread de surveillance, et le notify() dans mon thread arrivant à terme), à chaque fois j'ai l'exception "current thread not owner" (IllegalMonitorStateException) qui est levé.
qqun saurait me filer un coup de pouce
 
nb: mon code:

public class Monitor implements Runnable {
  public Monitor() {
    (new Thread(this)).start();
  }
 
  public void run() {
    try {
      wait();
    }
    catch (InterruptedException ie) {System.out.println("Erreur: synchronisation threads" );}
 
    System.out.println("monitor terminé" );
  }
 
}
 
 
public class monThread implements Runnable {
  ...
 
  public monThread(...) {
    ...
    (new Thread(this)).start();
  }
 
  ...
 
  public void run() {
    ...
    notify();
 
    System.out.println("monthread terminé" );
  }
 
}


Message édité par trevor le 17-12-2005 à 22:31:01

---------------
TReVoR - http://dev.arqendra.net - http://info.arqendra.net
Reply

Marsh Posté le 17-12-2005 à 21:53:27   

Reply

Marsh Posté le 17-12-2005 à 22:30:07    

oki c'est bon j'ai trouvé, j'avais déjà essayé la synchronisation sur un objet commun (passé via le constructeur de chaque thread):

public class Monitor implements Runnable {  
  public Monitor(JTextArea jta) {  
    ...  
  }  
 
  ...
}  
 
 
public class monThread implements Runnable {  
  ...  
 
  public monThread(JTextArea jta) {  
    ...  
  }  
 
  ...  
}


 
mais ca me renvoyait exactement la même exception
 
mais en fait il faut faire une exclusion mutuelle sur l'appel de ces méthodes avec synchronized:

public class Monitor implements Runnable {
  ...
  public void run() {
    try {
      synchronized (this.jta) {
        this.jta.wait();
      }
    }
    catch (InterruptedException ie) {System.out.println("Erreur: synchronisation threads" );}
  ...
  }
 
}
 
 
public class monThread implements Runnable {
  ...
 
  public void run() {
    ...
    synchronized (this.jta) {
      this.jta.notify();
    }
  }
  ...
 
}


Message édité par trevor le 17-12-2005 à 22:30:36

---------------
TReVoR - http://dev.arqendra.net - http://info.arqendra.net
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed