Les modèles, les interfaces et classes de programmation multithread
- Les concepts de base : tâche, ressource d’exécution, activité, service d’exécution, futur.
- Les différentes mises en œuvre des concepts (Runnable, Callable<T>, ExecutorService, Future<T>…).
- Les exceptions non catchées, les groupes de threads.
- Le futur complétable.
Travaux pratiques
Programmation d’une application combinant les différents modèles.
Les contraintes sur le comportement correct des activités
- Quelques méthodes formelles de spécifications.
- Une méthode semi-formelle de spécification.
- La mise en œuvre des spécifications.
Travaux pratiques
Utilisation de méthodes formelles de spécifications.
La synchronisation et communication des threads
- Les status "synchronized", "wait", "notify" et la programmation de moniteurs.
- Les interfaces et classes de synchronisation : verrous, sémaphores, les barrières cycliques.
- Les queue.
Travaux pratiques
Utilisation des interfaces et classes de synchronisation.
L'exécution de tâches en parallèle
- Les ExecutorService.
- Le modèle fork/join (RecursiveTask<T>, RecursiveAction, ForkJoinPool).
Travaux pratiques
Utilisation des services d’exécution et du modèle fork/join.
Les structures de données dédiées à la programmation multithread
- Les collections spécialisées.
- Le stockage local des données de thread : ThreadLocal<T>.
- Les classes Atomic.
Travaux pratiques
Utilisation des structures de données.
Les threads et les performances
- L’impact de la création de threads.
- L’impact de la synchronisation.
- L'impact des caches mémoire.
- Les threads et les IO, les BD et le graphique.
- Les threads et l'ordonnancement.
Travaux pratiques
Optimisation des programmes.
Les modèles alternatifs
- Les modèles asynchrones : JReact.
- Les modèles d'acteurs (Akka Actor4J...).
- Les modèles réactifs synchrones.
Outils dédiés au développement de programmes concurrents
- JConsole, jstack.
- La librairie JArmus.
- La logique temporelle de Lamport : TLA+.
- Les erreurs courantes : famine (contention), endormissement (dormancy), interblocage (deadlock), terminaison prématurée.