Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1604 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Java threads : wait() & notify()

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Java threads : wait() & notify()

n°1499942
berzehk
Posté le 07-01-2007 à 13:17:33  profilanswer
 

Bonjour,
 
voilà, j'essaye de gerer (tant bien que mal) la pause ds l'execution d'un thread. Pour pas avoir a réécrire ce code, j'ai créé une classe ControllableThread comme suit :
 

Code :
  1. public class ControllableThread extends Thread implements Controllable
  2. {
  3. public enum ThreadActiveStatus { paused, running };
  4. public enum ThreadCommand { start, stop };
  5. private ThreadActiveStatus activeStatus;
  6. private ThreadCommand command;
  7. private Job job;
  8. private ThreadStatusListener listener;
  9. private ExecutionLock lock;
  10. public ControllableThread(ExecutionLock arg0)
  11. {
  12.  super();
  13.  this.lock = arg0;
  14.  this.job = null;
  15. }
  16. public void run()
  17. {
  18.  while (true)
  19.  {
  20.   this.lock.getMonitor();
  21.   if (this.job != null)
  22.   {
  23.    while (this.command == ThreadCommand.start)
  24.    {
  25.     // on ns a pas demandé d'arreter, alors, on continue...
  26.     this.setActiveStatus(ThreadActiveStatus.running);
  27.     this.job.jobRun();
  28.    }
  29.    //le thread a été mis en pause.
  30.    this.setActiveStatus(ThreadActiveStatus.paused);
  31.    try
  32.    {
  33.     this.lock.wait();
  34.    }
  35.    catch (InterruptedException e) {}
  36.   }
  37.  }
  38. }
  39. private void setActiveStatus(ThreadActiveStatus activeStatus)
  40. {
  41.  this.activeStatus = activeStatus;
  42.  if (this.listener != null)
  43.  {
  44.   this.listener.onThreadStatusUpdate(this.activeStatus);
  45.  }
  46. }
  47. public ThreadActiveStatus getActiveStatus()
  48. {
  49.  return activeStatus;
  50. }
  51. public void setJob(Job arg0)
  52. {
  53.  this.job = arg0;
  54. }
  55. }


 
l'ExecutionLock est un objet simple qui est censé me permettre de lancer le travail du thread.
 

Code :
  1. public class ExecutionLock
  2. {
  3. private int  monitorNumber = 0;
  4. public ExecutionLock()
  5. {}
  6. public synchronized void getMonitor()
  7. {
  8.  this.monitorNumber++;
  9. }
  10. }


 
La méthode est totalement bateau, elle permet d'obtenir le monitor sur l'objet, comme le dit si bien la javadoc.
 
 
Donc, ici, si je lance le thread, il est censé se mettre directement en pause, car le champ command est a stop.
Ce qu'il fait donc, mais la ligne this.lock.wait() renvoie une exception IllegalMonitorStateException().
 
Je ne comprends pas pourquoi le lock m'envoie cette exception, vu que le thread a pris le monitor de cet objet 13 lignes plus haut??
Une idée?  :cry:

mood
Publicité
Posté le 07-01-2007 à 13:17:33  profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Java threads : wait() & notify()

 

Sujets relatifs
Probleme envoie de mails Java : courrier indésirableprobleme internet explorer avec java script
problème avec java 1.5.0 pas moyen d'afficher un graphique[Java] Classe File : méthodes delete() et renameTo() sans effet !
heure java[Java & XML] Parser SAX : comment ajouter un tag au cours du parsing ?
Aide pour installer une applet java...Threads Posix et verrous
JAVA et TEXT : help !!!Superposer 2 Images SWT Java
Plus de sujets relatifs à : Java threads : wait() & notify()


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR