Hello
Voilà j'essaie de faire un programme avec 2 threads et j'ai beaucoup de mal à comprendre comment les faire communiquer.
En gros j'ai un thread 1 de calcul dont la méthode run() consiste a calculer un tableau et à la stocker quelque part. L'opération prend en gros 10 ms.
En parralèle j'ai un thread 2 d'affichage qui se charge d'afficher les données d'un tableau toutes les 10 ms et qui le fait 10 fois avant de le faire sur le tableau suivant. L'opération sur un tableau donné me prend donc 100 ms.
Bref je voudrais que mon thread 1 se bloque quand il a fini de calculer, et que le thread 2 puisse le relancer quand l'affichage est fini (itération d'apres)
De meme, il faudrait que le thread 2 puisse se bloquer et attendre que le thread 1 ait fini de calculer dans le cas rare où le thread 1 aurait été lent.
On m'a dit d'utiliser un objet fictif que je nomme lock et d'utiliser lock.wait() et lock.notifyAll() depuis mes threads.
Bon apres testage ça marche pas... je me prend un IllegalMonitorStateException.
Ce que j'ai fait :
- mettre public static final Object lock = new Object(); dans la classe qui contient le main
- appeller lock.wait() ou lock.notifyAll() depuis mes threads créés depuis le main.
Comment corriger ça ?
Partager