Introduction
Java™ est un langage de programmation orienté objets et concurrent. Contrairement aux programmes dits séquentiels, un programme concurrent est capable d'exécuter plusieurs instructions en même temps, en parallèle. Mais comment ça se passe en pratique sur la machine ? Il faut distinguer deux cas : soit la machine ne dispose que d'un seul processeur physique, soit elle en a plusieurs ou elle n'en a qu'un seul, mais avec plusieurs cœur.
Dans le cas de machines avec plusieurs processeurs ou de processeurs avec plusieurs cœurs, c'est assez évident, il va y avoir à tout moment plusieurs instructions qui seront réellement exécutées en même temps en parallèle. Pour les machines ne disposant que d'un seul processeur, l'exécution parallèle va en réalité être simulée. Le système d'exploitation de la machine va prendre en charge l'ordonnancement des différentes tâches devant être exécutées en parallèle et il va faire en sorte que chacune d'elle soit exécutée en alternant entre celles-ci.
Vous utilisez tous les jours des programmes concurrents, parfois même sans le savoir. Déjà, tous les systèmes d'exploitation courants sont hautement concurrents (Microsoft Windows, Linux, Mac OS X). Ils doivent en effet s'exécuter, exécuter les programmes que vous avez lancé (dont le navigateur que vous utilisez pour lire cette page), ... Justement, parlons-en de ce navigateur : il est en train de faire plusieurs choses en ce moment même , et le tout en même temps : il vérifie les dernières mises à jour, il entretient des connexions avec différents serveurs pour chaque page que vous lui avez demandé de charger, il est peut-être en train de gérer des téléchargements de fichiers, ...
Ce tutoriel traite de la programmation concurrente en Java™. On verra comment faire pour écrire des programmes concurrents corrects. En effet, on verra qu'une fois qu'on fait de la programmation concurrente, de nombreux problèmes peuvent survenir. Il y a par exemple des blocages total de l'application, ou alors certaines tâches ne seront jamais exécutées. Il y a également des problèmes de cohérence de la mémoire partagée qui peuvent apparaitre.