Java Concurrency in Practice

avril 29, 2016

[azonbox2 imgurl= "https://livreinformatique.com/wp-content/uploads/2016/04/Java-Concurrency-in-practice-227x300.jpg" imgdsc="" lnktxt= "Acheter sur Amazon" linkl="https://livreinformatique.com/go/java-concurrency-in-practice/" headline= "Java Concurrency in Practice" subhline="Programmation concurrente en Java" text= "" ]

Java Concurrency in Practice : Présentation

Tout langage de programmation qui se respecte se doit d’avoir un livre comme Java Concurrency in practice (que l’on traduirait par la concurrence en pratique au sein de Java). D’habitude, je n'aime pas les livres de langages de programmation trop spécifiques parce qu'ils ont tendance à devenir désuets tres rapidement. Ils sont souvent tres spécifiques à une version particulière d'un langage particulier, à tel point que toute petite amelioration du langage ou changement dans les proprietes de base du langage les rend inutiles.
Ce n'est pas le cas avec Java Concurrency in practice. Ce livre mélange le contexte de concurrence général à tous les langages avec l’analyse spécifique Java ainsi que certains conseils applicables seulement à certaines versions de Java. Au moment où les nouvelles versions de Java sortent, ce livre aura toujours de la valeur, bien que pas autant qu'à la publication initiale, car il expliquera clairement ce que le développeur pourra faire pour optimiser son application. Les nouvelles versions de langages etant le plus souvent retrocompatibles, l’utilisateur ne perdra pas son savoir et au contraire pourra construire sur les connaissances obtenues grace a ce livre pour affiner ses connaissances generales et répondre de la manière la plus pertinente a un besoin precis. Si vous vous interessez a un autre langage, ou que vous en êtes un expert, il y a toujours beaucoup de parties du livre qui vaudront la peine d’etre lues, mais pas forcément tout le livre, c'est pourquoi je prefere dire que chaque langage aurait besoin d’avoir son propre équivalent de ce livre.

A qui s'adresse Java Concurrency in Practice ?

Java Concurrency in practice se lit bien pour quelqu'un d'un niveau intermédiaire ou quelqu'un de plus expérimenté. Pour un débutant, même si le livre est clair, certains concepts paraitront trop abstraits ou complexes pour être compris. Je me suis retrouvé plusieurs fois dans une situation où j'étais impatient de le lire, ce qui n'est pas toujours le cas avec des manuels techniques. La lecture permet d'acquérir les connaissances nécessaires au fur et à mesure, l'auteur s'assure que chaque concept ou chaque appel à une méthode de la librairie Java est présenté et expliqué avant d'être utilisé. A vrai dire, les quelques fois ou quelque chose été utilisé avant d'être introduit étaient sufisamment rares pour être notées. Je me rappelle particulièrement du cas de la méthode join().

Les chapitres de Java Concurrency in Practice

Java Concurrency in Practice démarre par une introduction sur la concurrence et le multithreading. Il commence par souligner l'importance de la programmation concurrente : de nos jours, la vitesse d'exécution vient principalement du fait d'avoir plusieurs cores dans un processeur et le programmeur doit en tirer partie au mieux. Le livre présente ensuite les concepts plutot basiques de thread-safety, atomicité, locks, durée de vie, visibilité et publication. Avant d'ouvrir ce livre, je considérais avoir un bon niveau sur la théorie de la programmation concurrente et pourtant j'ai appris beaucoup avec ces chapitres d'introdution au début du livre. Je considerais principalement la programmation concurrente en termes de contrôle et accès aux données, mais je n'avais pas pensé à sa relation avec la visibilité de la mémoire, spécialement dans le cas de compilateurs optimisés.

L'essentiel de l'ouvrage discute les différentes technique pour construire des applications thread-safe et raisonnablement performantes. Les règles données par l'auteur sont faites pour rendre vos programmes surs et compréhensibles. Elles n'optimiseront pas chaque ligne de code mais les auteurs soutiennent l'idée que de mini optimisations ne sont souvent pas nécessaires et nuisent à la lisibilité du code. En effet, en terme d'optimisation, un code optimisé au maximum peut se retrouver apres quelques modifications plus lent que du code bien concu et réfléchi.

Les auteurs se concentrent donc plutôt sur les conseils pour écrire du code facile à comprendre et à maintenir, et dans un second temps seulement, trouver les goulots d'étranglements et optimiser ces parties de code uniquement. Cela nous donne des règles parfois bas niveau comme favoriser les objets immutables lorsque c'est possible ou des règles plus haut niveau sur quelle architecture suivre pour vos programmes : à quel grain de finesse doit être gérée la concurrence ? Avec l'explication des intéressante des context-switch par exemple.

Enfin, ce qui rend Concurrency in Practice aussi intéressant, c'est aussi le fait que les auteurs ne vous parlent pas comme à un débutant ou comme à un idiot. Après avoir passé l'essentiel du livre à vous aider à comprendre les complexités de la programmation concurrente, la dernière partie se concentre sur comment vous tirer une balle dans le pied. Cette partie discute des pour et des contre de certains choix techniques, notamment certains cas où certaines attentes en terme de performances vous forcent à prendre plus de risque sur la concurrence. Les derniers chapitres discutent de la sychronisation non bloquante, des locks explicites, du modèle de mémoire Java (Java Memory Model), un ensemble de sujets à connaitre mais à utiliser avec la plus grande attention.

Java Concurrency in Practice : Notre avis

Nous recommendons fortement Java Concurrency in Practice à tous les développeurs Java. Même si vous n'utilisez pas la concurrence explicitement dans votre code, vous serez amené à l'utiliser de temps en temps dans l'utilisation de certaines librairies par exemple. La première partie est faite pour vous. Si vous programmez principalement dans un autre langage, je vous recommanderai soit de trouver un livre similaire dans votre langage de prédilection, soit de lire ce livre ne serait ce que pour les chapitres génériques non liés à langage particulier. Comprendre la programmation concurrente est devenu l'impératif de beaucoup de développeurs en général et développeurs Java en particulier.