Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Thread Wait ou sleep ?

2 réponses
Avatar
Ab
Bonjour,

j'ai réalisé une appli avec environ 10 threads qui s'execute à des temps
définis (un thread toutes les 5s, un toute les 30s, une toute les 1ms
etc...). Pour faire cela, dans chaque thread, une fois qu'il a fini de faire
sa tache, je fais un sleep du temps définis (puis une boucle).

Est-ce vraiment une bonne solution ? Car en fait, même si tout mes thread
sont en sleep, ils sont toujours actifs et prennent des ressources, non ?

J'ai vu que je pourrais faire un wait en fin de traitement, mais dans ce cas
là, ne dois-je pas créer un thread (principal) qui s'occupe de réveiller
(notify) chaque thread ? Mais dans ce cas là, comment faire pour réveiller
le thread 1 toutes les 5s, le 2 toutes les 30s etc... ??

Je suis peut etre complètement à coté d'une bonne conception...
Je vous remercie pour vos critiques.

2 réponses

Avatar
Arnaud Roger
j'ai réalisé une appli avec environ 10 threads qui s'execute à des temps
définis (un thread toutes les 5s, un toute les 30s, une toute les 1ms
etc...). Pour faire cela, dans chaque thread, une fois qu'il a fini de
faire

sa tache, je fais un sleep du temps définis (puis une boucle).

Est-ce vraiment une bonne solution ?
bof

Car en fait, même si tout mes thread
sont en sleep, ils sont toujours actifs et prennent des ressources, non ?
non


J'ai vu que je pourrais faire un wait en fin de traitement, mais dans ce
cas

là, ne dois-je pas créer un thread (principal) qui s'occupe de réveiller
(notify) chaque thread ? Mais dans ce cas là, comment faire pour réveiller
le thread 1 toutes les 5s, le 2 toutes les 30s etc... ??


sun l'a deja fait pour toi
http://java.sun.com/j2se/1.4.1/docs/api/java/util/Timer.html


Arnaud R.

Avatar
Emmanuel PIC
wait() sert à libérer le lock fait sur une ressource à un moment donné.
Cette méthode doit être appelée par la ressource en question pour
libérer le lock. L'appel à wait() place le thread dans une liste dans
laquel il sera inactif jusqu'à ce qu'on le réveille avec un notify().

notify() réveille un thread de la liste *au hasard*. Dans ce cas,
l'utilisation de notifyAll() est plus approprié puisqu'on est sûr de
réveiller le thread qu'on veut (c'est sûr, les autres threads seront
réveillés aussi :))

En définitive, je ne pense pas que la solution que tu cherches passe par
l'utilisation de wait/notify.

Ab wrote:
Bonjour,

j'ai réalisé une appli avec environ 10 threads qui s'execute à des temps
définis (un thread toutes les 5s, un toute les 30s, une toute les 1ms
etc...). Pour faire cela, dans chaque thread, une fois qu'il a fini de faire
sa tache, je fais un sleep du temps définis (puis une boucle).

Est-ce vraiment une bonne solution ? Car en fait, même si tout mes thread
sont en sleep, ils sont toujours actifs et prennent des ressources, non ?

J'ai vu que je pourrais faire un wait en fin de traitement, mais dans ce cas
là, ne dois-je pas créer un thread (principal) qui s'occupe de réveiller
(notify) chaque thread ? Mais dans ce cas là, comment faire pour réveiller
le thread 1 toutes les 5s, le 2 toutes les 30s etc... ??

Je suis peut etre complètement à coté d'une bonne conception...
Je vous remercie pour vos critiques.