Bonjour,
j'ai actuellement 2 thread A et B.
J'aimerais savoir comment faire pour les synchroniser ou autre pour avoir le résultat suivant que A ce lance, ensuite B, ensuite A, ensuite B etc...
merci
Bonjour,
j'ai actuellement 2 thread A et B.
J'aimerais savoir comment faire pour les synchroniser ou autre pour avoir le résultat suivant que A ce lance, ensuite B, ensuite A, ensuite B etc...
merci
Salut,
A puis B puis A puis B... ce n'est pas du simultané mais du séquentiel !
Donc pas la peine d'utiliser des threads.
a++
Si je comprends bien tu as 2 threads et que tu appeles par un t1.start() et t2.start() et tu veux séquencer leur exécution ?
je pense que tu devrais utiliser un sémaphore et le mot clé synchronized.
Un truc du genre
bon c'est pas du tout ce qu'il faut faire mais c'est pour t'expliquer que tu dois déléguer l'exécution de tes threads à un thread tiers qui va gérer un genre de mécanisme de jetons.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Object semaphore = new Object(); synchronized(semaphore) { t1.start(); } synchronized(semaphore) { t2.start(); }
Un mécanisme dérivé du Timer pourrait faire l'affaire aussi peut-être ?
Je pense à autre chose : tu peux aussi utilise le notify du Thread pour notifier le second Thread qu'il peut commencer à travailler.
Mon exemple précédent est un peu foireux parce que probablement le plus logique serait d'avoir un sémaphore statique dans la classe qui instancie et lance les threads et d'utiliser le synchronize sur ce sémaphore au sein de tes threads individuellement. Ainsi, l'execution de ce qu'il y a dans le synchronized sera retardée jusqu'à ce que le verrou soit libéré par l'un ou l'autre des threads.
Comme je ne connais pas ton besoin réel et la structure de ton appli je ne peux pas être plus précis. Ce que je dis est un peu confus techniquement mais le principe est là : verrou (sémaphore) ou bien notification ou encore pool de threads (jetons). A mon avis.
Pour précision je ne peux pas modifier le code de mes threads. Cependant, le thread emet deux évènements qui marche en gros de la façon suivante :
la méthode start me permet de savoir le début du traitements et end la fin d'un traitement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public void run(){ while(true) { start(...); // le traitement end(...); } }
Dans l'Object Event je récupère la date et une référence vers l'objet qui viens d'émettre le message...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager