Java threads: une critique de livre comparative

Depuis la sortie des premières éditions de Java Threads d'O'Reilly et Concurrent Programming in Java d'Addison-Wesley il y a plusieurs années, je les recommande aux personnes qui souhaitent apprendre à utiliser les threads. Avec plusieurs livres concurrents et des secondes éditions des originaux, maintenant disponibles, j'ai décidé de réévaluer mes recommandations. Dans cet article, je vais examiner six des derniers livres de programmation de thread Java.

Les six livres examinés sont:

  1. Java Threads, deuxième édition, Scott Oaks et Henry Wong (O'Reilly)
  2. Programmation simultanée en Java, deuxième édition, Doug Lea (Addison-Wesley)
  3. Apprivoiser les threads Java, Allen Holub (Apress)
  4. Programmation Java Thread, Paul Hyde (Sams)
  5. Programmation multithread avec la technologie Java, Bil Lewis et Daniel Berg (Prentice Hall, Sun Press)
  6. Informatique de plate-forme Java haute performance: programmation multithread et en réseau, Thomas Christopher et George Thiruvathukal (Prentice Hall, Sun Press)

Le tableau ci-dessous présente un bref aperçu des principales caractéristiques des six livres.

Tous les livres sont basés sur la version 1.2.x de la plate-forme Java 2.
Présentation de Threads Books
  Threads Java Programmation simultanée Apprivoiser les threads Java Programmation de thread Java Programmation multithread Java haute performance
Prix 2,95 9,95 4,95 4,99 9,99 9,99
Pages totales 320 410 300 510 460 410
CD-ROM / Source à partir du Web Non Oui Non Oui Non Oui Non Oui Non Oui Non Oui
Principes de base du fil Excellent Juste Aucun Excellent Excellent Juste
Techniques Très bon Bien Très bon Excellent Bien Très bon
Modèles de conception Aucun Excellent Pauvres Aucun Aucun Bien
Échelle: aucune, médiocre, moyenne, bonne, très bonne, excellente

Le tableau doit être assez explicite jusqu'à l'attribut CD-ROM. Permettez-moi d'expliquer plus en détail les dernières lignes:

  • L'attribut de base de discussion indique la mesure dans laquelle les livres décrivent ce qu'un fil est et comment l'utiliser: la description de la Threadclasse et l' Runnableinterface, les Objectméthodes de wait(), notify()et notifyAll(), et le synchronizedmot - clé.
  • L'attribut Techniques évalue dans quelle mesure les livres explorent les techniques d'utilisation des threads.
  • L'attribut Design Patterns mesure l'explication des livres sur la façon de créer une programmation basée sur des threads en suivant des modèles de conception bien définis.

Ensuite, je passerai en revue chaque livre. À côté du titre de chaque livre se trouve une note par étoiles, basée sur la zone de couverture du fil sur laquelle ce livre prétend se concentrer, pas seulement une moyenne des trois attributs énumérés ci-dessus. Une étoile indique un mauvais travail; la note la plus élevée (cinq étoiles) désigne une couverture exceptionnelle.

Threads Java

La première édition de Java Threads, par Scott Oaks et Henry Wong, était la ressource définitive originale pour apprendre à programmer avec des threads. Alors que la plupart des livres d'introduction expliquaient ce qu'était un thread et comment utiliser la Threadclasse avec l' Runnableinterface, Java Threads a fourni les informations supplémentaires nécessaires pour les utiliser efficacement. La deuxième édition suit ses traces: elle comprend des informations mises à jour sur l'utilisation des threads avec la plate-forme Java 2, des informations sur les API obsolètes, l'interruption des E / S et les changements de sécurité Java 2. Le livre couvre également les problèmes de multithreading avec l'ensemble de composants Swing et fournit une aide pour la prise en charge de la planification native et l'utilisation de machines multiprocesseurs.

Si vous êtes nouveau dans la programmation Java et que vous n'avez pas encore conquis les threads, Java Threads est une excellente ressource. Vous aurez un aperçu des bases du threading Java et apprendrez les techniques nécessaires pour que vos programmes fonctionnent correctement dans un monde multithread.

Programmation simultanée en Java

Alors que Java Threads explique les détails de bas niveau de l'utilisation de l'API Threads, Concurrent Programming in Java, de Doug Lea, explore la conception appropriée des programmes multithreads. Savoir utiliser l'API n'est pas suffisant dans le monde Java; vous devez également consacrer du temps et de l'énergie à la conception de votre programme. Dans cette optique, Concurrent Programming est principalement un livre de modèles de conception. Étant donné un certain problème, vous pouvez rechercher le modèle défini dans le livre, et votre programme s'écrit pratiquement tout seul.

La programmation simultanée est divisée en quatre zones qui décrivent différents modèles d'utilisation. La section "Programmation orientée objet simultanée" vous présente les bases. La section "Exclusion" décrit les modèles d'utilisation du synchronizedmot - clé. « Etat » dépendance avec analyse des questions et des modèles pour l' utilisation des wait(), notify()et des notifyAll()méthodes de la Objectclasse. La dernière section, "Création de threads", concerne les modèles d'utilisation de la Threadclasse.

Ce livre s'adresse définitivement à l'utilisateur avancé et n'est pas pour les âmes sensibles. Vous devez avoir une bonne maîtrise de la programmation orientée objet et du langage de programmation Java, et ne manquer que dans le domaine de la conception de programmes pour les problèmes de concurrence. En plus du livre, Lea met gratuitement à disposition la bibliothèque concurrente util. Sur le site Web du livre. (Voir Ressources pour un lien.) La bibliothèque vous aidera à concevoir et développer des programmes multithread.

Apprivoiser les threads Java

Taming Java Threads d' Allen Holub , est né ici à JavaWorld en tant que série Java Toolbox en neuf parties. Les articles ont depuis été mis à jour et forment maintenant le contenu du livre, avec un nouveau chapitre intéressant qui décrit les problèmes avec l'API de threading de Java. (Voir Ressources pour un lien vers cette section, intitulée «Si j'étais roi».) Apprivoiser est différent des deux premiers livres que j'ai examinés; il s'agit strictement de techniques pour utiliser correctement l'API. Ce n'est pas une introduction aux fils ou un livre de modèles de conception. Une bibliothèque de code (voir Ressources pour un lien) est également disponible afin que vous puissiez profiter de ce que vous avez appris. Assurez-vous cependant de lire le contrat de licence; ce n'est pas du domaine public ou open source.

Après avoir décrit l'architecture de base du modèle multithreading de Java, Holub explique les dangers liés à l'utilisation de threads et les techniques pour les utiliser en toute sécurité. Vous apprendrez à créer et à utiliser des mutex, des sémaphores et des variables conditionnelles. Vous vous familiariserez avec les différences entre Swing invokeLater()et invokeAndWait()méthodes. Holub explore également la AWTEventMulticasterclasse et montre comment elle est thread-safe avec une surcharge minimale, et comment vous pouvez travailler avec des pools de threads. Une fois que tout est dit et fait, vous aurez une excellente compréhension des limites et de l'utilisation du modèle de thread Java.

J'ai été surpris de voir des erreurs techniques dans le livre - dans la préface, pas moins - mais cela n'a pas nui aux excellentes informations que le livre offre. Cependant, après avoir continuellement vu du code Java formaté avec une casse mixte, j'ai été un peu surpris que le code de Holub soit formaté avec le caractère de soulignement entre les mots des variables et les noms de méthode. Vous devrez peut-être lire les blocs de code plusieurs fois avant de les comprendre pleinement, mais la qualité des informations fournies ici en vaut la peine. Une dernière remarque: tout le code source est entièrement commenté par javadoc.

Programmation de thread Java

Java Thread Programming, de Paul Hyde, est directement en concurrence avec Java Threads. Il cible clairement le développeur novice et comprend une couverture supplémentaire sur des sujets et des techniques plus avancés pour le moment où ce développeur «grandit». Ce livre est le plus grand du groupe et l'espace est mis à profit.

La première moitié de Java Thread Programming explique ce que sont les threads et comment utiliser les bases. Vous obtenez la description typique de la création de threads et de l'utilisation de l' Runnableinterface. Il y a un chapitre sur la façon d'arrêter les threads, y compris comment les suspendre et les reprendre sans utiliser les méthodes obsolètes - des techniques intéressantes pour augmenter la productivité. En plus de couvrir wait()et notify(), Hyde décrit en détail le volatilemot - clé et la communication entre les threads via les tuyaux d'E / S. Java Thread Programming a également la meilleure couverture des classes ThreadLocalet InheritableThreadLocal, en plus de la couverture habituelle des threads et Swing que l'on trouve dans d'autres livres.

La partie 2 de la programmation des threads Java décrit les techniques d'utilisation des threads Java. Il offre la meilleure couverture de pool de threads et un bon chapitre sur la sortie des E / S bloquées. Vous ne serez pas déçu de cette sélection.

Programmation multithread avec la technologie Java

Il semble que je trouve toujours au moins un livre qui ne ressemble pas tout à fait aux autres - La programmation multithread avec la technologie Java, de Bil Lewis et Daniel Berg, est une telle bête. Je lui ai encore attribué une note d'étoiles, mais ce livre mérite une mention spéciale. À mon avis, la programmation multithread 'Le but principal de s n'est pas de vous apprendre à programmer avec des threads en Java. Il vous aidera dans ce domaine, mais son objectif principal semble être de vous apprendre comment fonctionne l'architecture de thread sous-jacente, à la fois dans la machine virtuelle Java (Java VM) et les systèmes d'exploitation sous-jacents. En fait, vous obtenez non seulement de nombreux exemples de code du livre en code Java, mais également du code POSIX et du code pour la gestion des threads de l'API Win32. S'il y avait des exercices pour les lecteurs à la fin de chaque chapitre, cela fonctionnerait bien comme un texte universitaire.

Cela dit, dans quelle mesure la programmation multithread vous apprend-elle à utiliser les threads? Il ressemble le plus à Java Threads ; son objectif principal est de vous apprendre ce qu'est un fil et comment l'utiliser. Il montre également comment tout fonctionne sous le capot dans la machine virtuelle Java, comment tout est planifié dans la machine virtuelle Java, etc. En outre, vous obtenez une couverture des sujets de threads typiques tels que la synchronisation, les blocages et les conditions de concurrence. Lewis et Berg couvrent même les problèmes de threads avec RMI et des techniques d'optimisation pour améliorer les performances. Dans l'ensemble, c'est un bon livre - mais pas votre présentation typique des threads Java.

En ce qui concerne les exemples du livre, faites attention à Elvis se faire prendre par les OVNIS.

Calcul de plate-forme Java haute performance

L'enregistrement avec le titre le plus long est High Performance Java Platform Computing: Multithread and Networked Programming, par Thomas Christopher et George Thiruvathukal. Même les noms de famille des auteurs font au moins le double de la longueur de leur concours! L'excès ne s'arrête pas là; ce livre coûte également plus de 25% de plus que les autres.

Assez parlé de l'extérieur - qu'y a-t-il à l'intérieur? La haute performance entre directement dans une discussion sur le calcul parallèle. Vous découvrirez la machine von Neumann, la taxonomie de Flynn, l'accélération linéaire et la loi d'Amdahl, le tout dans le chapitre 1. Le chapitre 2 explore la création de threads plus en profondeur que la plupart des introductions à l'API. Après une démonstration des conditions de course, le chapitre 3 explique la synchronisation et pourquoi vous en avez besoin. Le chapitre 4 se penche en profondeur sur les moniteurs, avec de nombreuses variantes sur les problèmes de verrouillage du lecteur-écrivain. Au chapitre 5, les auteurs discutent de l'utilisation de la mémoire partagée - sur le tas, pas sur la variété système Unix - le tout dans le but d'avoir un pool de threads. Le reste du livre couvre les modèles de développement d'applications pour une exécution parallèle.

Il y a beaucoup de bonnes informations ici sur le calcul parallèle, mais le but de High Performance n'est pas vraiment d'enseigner la programmation de threads à usage général. Il semble être développé principalement comme un texte pour un cours de calcul parallèle - chaque chapitre se termine par une série d'exercices réfléchis, auxquels je n'ai pas trouvé de réponses.

Dois-je continuer à recommander la même chose?

Les premières éditions de Concurrent Programming dans Java et Java Threads sont sorties en 1997 et étaient fortement recommandées. Est-ce que je recommande aveuglément leurs deuxièmes éditions? En bref, il semble que la programmation simultanée de Lea soit toujours une excellente ressource pour ceux qui apprennent à concevoir des programmes pour le monde multithread. Ce n'est pas une lecture facile, mais les modèles de conception et les techniques expliqués dans le livre sont d'excellents outils pour les développeurs Java sérieux.

D'un autre côté, il semble que Java Threads ait été remplacé par Java Thread Programming de Sams comme le meilleur livre pour les débutants. Rien n'est techniquement faux avec l'offre O'Reilly, mais la programmation de threads Java fonctionne mieux comme introduction aux threads Java. Hyde va même au-delà du matériel d'introduction, offrant des techniques plus avancées pour un supplément.

Si vous avez les premières éditions de Java Threads et Concurrent Programming en Java, les mises à jour valent-elles la peine d'être obtenues? Je pourrais vous recommander de vous procurer la deuxième édition de Lea et de transmettre Java Threads. Si vous possédez la première édition de Java Threads, vous avez probablement dépassé le stade de la nécessité d'en créer une seconde. Si vous avez encore besoin d'un texte d'introduction, optez plutôt pour la programmation Java Thread de Sams .

Que faire du reste? C'est vraiment un appel difficile et dépend de qui vous dépensez. Si je ne pouvais obtenir qu'un seul livre de fils de plus, je choisirais la programmation multithread avec la technologie Java. Sa couverture de threads est unique et suffisamment utile pour en faire un ajout intéressant à une bibliothèque. Les threads Java Taming de Holub contiennent de belles techniques pour tirer le meilleur parti de la programmation des threads. Je ne sais pas si c'est une ressource nécessaire, cependant. Le calcul haute performance sur plateforme Java semble approprié pour ceux qui s'intéressent au monde du calcul parallèle. Sinon, je le laisserais sur l'étagère.

John Zukowski est un consultant Java indépendant, auteur du Guide définitif de Swing pour Java 2, deuxième édition d'Apress, Mastering Java 2 de Sybex et Java AWT Reference d'O'Reilly, ainsi que du guide Focus sur Java d'About.