Note : 9 ; Un remarquable ouvrage sur le multithreading, pour Java et pour les autres langages également … même si on accueillerait volontiers une mise à jour !
J’ai écrit cette note en 2005. Les livres liés à des technologies particulières ont fâcheusement tendance à mal accueillir le passage du temps. Celui-ci subit moins cette tendance car il s’intéresse plus aux concepts sous-jacents mais il vous faudra certainement relativiser certaines parties de mon propos.
S’il est un sujet d’importance sur le développement Java peu abordé aujourd’hui, c’est bien la programmation concurrente. Sans être ignoré, le multi-threading est largement mis de coté, ne serait-ce que parce que le développement coté serveur ne permet pas sa mise en œuvre. Or, il s’agit bien là d’un aspect majeur de conception, important coté client, et plus important encore avec l’avènement des clients riches. O, développeur Java, tu as bien de la chance dans ta misère, car à ta disposition un livre sur le multithreading tu as ! Nous parlons bien entendu du livre de Doug Lea. Bien sûr, il existe d’autres livres sur le sujet, ne vous attardez pas sur ceux-là : le livre de Doug Lea est LE livre. En fait, Doug Lea est le multithreading en Java, car depuis la version 1.5, l’API officielle dédiée au multi-threads est celle développée par l’auteur.
Mais revenons au livre lui-même. Et là, comme disent les jeunes : c’est du lourd ! La lecture des 380 pages du volume n’a rien d’une promenade bucolique, le texte et l’information sont denses. On aurait pu s’attendre à un livre traitant des spécificités de Java sur le multithreading, cet ouvrage va bien au-delà. Comme indiqué dans le titre, on parle avant tout de principes de conception et de patterns, puis de mise en œuvre en Java. C’est l’une des forces du livre : focaliser sur des principes de conceptions à l’aide de patterns, décrivant ainsi le contexte d’utilisation. L’ensemble est supporté par des représentations UML lorsque c’est nécessaire et du code Java avec juste le niveau de détail qui convient. On dénombre ainsi 17 patterns, répartis en 4 chapitres seulement, couvrant les sujets suivants :
- La programmation concurrente : Ce chapitre évoque les principes de base de la programmation multithreads et des concepts liés tels que la synchronisation, les queues d’évènements, les pools de threads, etc. La base, quoi !
- Les exclusions : On attaque les choses sérieuses, ou quelles sont les stratégies de base sur l’exclusion (l’élimination, la gestion dynamique ou la gestion structurelle), et comment celle-ci se déclinent en 5 patterns.
- Les dépendances d’états : Ce chapitre nous montre comment géré en environnement concurrent des comportements dépendants d’états.
- La création de threads : On couvre ici les choix de conception lié à la gestion au partage et à la création de threads.
Au cas où ce matériel ne suffirait pas à assouvir votre soif de savoir, l’auteur dispense 2 ou 3 pages de références de « lectures supplémentaires » en fin de chaque chapitre. De quoi satisfaire n’importe quelle boulimie ! Les chapitres en eux-même sont hélas un peu volumineux, ce qui conduit à un chapitrage à 4 niveaux, ce qui est trop. L’auteur aurait dû découper le livre en autant de parties et réaliser des chapitres plus courts. Ce sera peut-être ma seule critique.
La qualité de ce livre est en tout point remarquable, c’est en fait une référence incontournable pour quiconque désire s’attaquer au multithreading sur des systèmes objet, même au-delà du langage Java !
Ce livre fait sans contestations possibles, partie de la catégorie des excellents surprises, il est en tout point remarquable, aussi bien par sa couverture du sujet que par sa qualité pédagogique, et ce malgré le niveau relevé du texte. C’est de fait une référence incontournable pour quiconque désirerai s’attaquer au multithreading sur des systèmes objet, même au-delà du langage Java ! Finalement, j’ai un autre regret à formuler : cette édition accuse 5 ans, une 3ème édition mise à jour par rapport à Java 1.5 serait la bienvenue.
Allez Doug, t’as bien mérité ton 9 !
Référence complète : Concurrent Programming in Java, second edition: Design principles and patterns – Doug Lea – Addison Wesley / Java series 2000 – ISBN: 0-201-31009-0