Synchronisations et communications entre Threads
IFT 3880-IFT 6835 APPLICATIONS DISTRIBUÉES
Par Laurent Magnin
Cours IFT 3880 & 6835, tous droits réservés / 2
Synchronisation des Threads
•Méthode yield()
•Méthode sleep()
•Différences de priorité [EThread5]
•Blocs synchronisés [EThread6*]
•synchronized(objet){…}
•Synchronized void myMethod{…}
•Synchronisation sur l’objet appelant la
méthode
•wait() - notify() & notifyAll() [EThread71]
•join() [EThread72]
Cours IFT 3880 & 6835, tous droits réservés / 3
Cycle de vie des Threads
1. thread makes wait() call
2. thread tries to run in synchronized region but cannot acquire lock
3. thread has been moved off the blocked queue by notify() or
notifyAll().
4. thread has been woken up by some other thread either◦leaving
the synchronized region◦making a wait call
5. thread does an I/O call (including sleep)
6. thread completes I/O call (including finishing sleep time)
7. thread chosen to run
8. thread yields CPU to some other ready thread either by
•◦explicit yield() call
•◦preempted by Java kernel
Cours IFT 3880 & 6835, tous droits réservés / 4
Dangers liés à l’utilisation de Threads
•Absence de synchronisations
•Ordre des opérations incohérent
•Problème d’accès aux ressources
•Deadlocks (étreintes mortelles)
•A attend B, lequel attend C, lequel attend A…
Cours IFT 3880 & 6835, tous droits réservés / 5
Communication entre Threads
•Variables synchronisées
•Exemple Producteur / Consommateur [EThread9*]
•Par files de messages (Stream)
•Local (EThread8)
•Sockets (prochain cours)
Cours IFT 3880 & 6835, tous droits réservés / 6
Lecture de Streams / Char