on va accepter le fait que ce soit un exercice donc (même si ça en est un très mauvais à mon avis).
Chaque Thread va avoir l'ordre d'exécution suivant:
attendre la ressource dont il a besoin
effectuer son travail
informé qu'il a créé une ressource (pour l'autre qui en a besoin)
C'est chiant et complexe à faire. Heureusement, java récent est gentils et te fournis un truc bien utile: les BlockingQueue (qui correspondent, d'ailleurs, à ta simulation), donc l'implémentation ArrayBlockingQueue.
Reprenons:
Thread A est une "chaine de production qui produit des A quand des D sont disponibles", Thread B est une" chaine de production qui produit des B quand des A sont disponible", etc
Tu as donc
4 chaines de productions (les threads)
et quatres bacs à produits que tu dois surveiller et remplir (les Queue). Ces derniers peuvent être implémentés par une ArrayBLockinQueue. Ces Queues sont remplis par un Thread et lues par un autre. Elle ont une taille max (dans ton cas 1). Tu devra donc avoir
1 2 3 4 5 6
| ThreadX:
while(true){
lire dans queue d'entrée
afficher mon texte
écrire dans queue de sortie
} |
Voilà, t'aura juste à poser un truc dans la queue d'entrée de Thread A au début pour lancer tout le bazar

Aucun wait, aucun notify, la Queue fait le boulot pour toi
Partager