Thread Java: una recensione comparativa del libro

Da quando sono uscite le prime edizioni di Java Threads di O'Reilly e Concurrent Programming in Java di Addison-Wesley diversi anni fa, le ho consigliate a persone che vogliono imparare a usare i thread. Con diversi libri in concorso e le seconde edizioni degli originali, ora disponibili, ho deciso di rivalutare le mie raccomandazioni. In questo articolo, esaminerò sei degli ultimi libri di programmazione dei thread Java.

I sei libri recensiti sono:

  1. Java Threads, seconda edizione, Scott Oaks e Henry Wong (O'Reilly)
  2. Programmazione concorrente in Java, seconda edizione, Doug Lea (Addison-Wesley)
  3. Addomesticare i thread Java, Allen Holub (Apress)
  4. Programmazione thread Java, Paul Hyde (Sams)
  5. Programmazione multithread con tecnologia Java, Bil Lewis e Daniel Berg (Prentice Hall, Sun Press)
  6. Piattaforma Java ad alte prestazioni: programmazione multithread e in rete, Thomas Christopher e George Thiruvathukal (Prentice Hall, Sun Press)

La tabella seguente fornisce una rapida rassegna delle caratteristiche principali dei sei libri.

Tutti i libri sono basati sulla versione 1.2.x della piattaforma Java 2.
Panoramica dei libri sui thread
  Thread Java Programmazione simultanea Domare i thread Java Programmazione di thread Java Programmazione multithread Java ad alte prestazioni
Prezzo 2.95 9.95 4.95 4.99 9.99 9.99
Pagine totali 320 410 300 510 460 410
CD-ROM / Fonte dal Web No sì No sì No sì No sì No sì No sì
Nozioni di base sui thread Eccellente Giusto Nessuna Eccellente Eccellente Giusto
Tecniche Molto buona Buona Molto buona Eccellente Buona Molto buona
Modelli di progettazione Nessuna Eccellente Povero Nessuna Nessuna Buona
Scala: nessuna, scarsa, media, buona, molto buona, eccellente

La tabella dovrebbe essere abbastanza autoesplicativa fino all'attributo CD-ROM. Consentitemi di spiegare ulteriormente le ultime righe:

  • L'attributo Basics discussione indica la misura in cui i libri descrivono ciò che un filo è e come usarlo: descrivere la Threadclasse e Runnableinterfaccia, i Objectmetodi di wait(), notify()e notifyAll(), e la synchronizedparola.
  • L'attributo Tecniche valuta quanto bene i libri esplorano le tecniche nell'uso dei thread.
  • L'attributo Design Patterns misura la spiegazione dei libri su come creare una programmazione basata su thread seguendo schemi di progettazione ben definiti.

Successivamente, esaminerò ogni libro. Accanto al titolo di ogni libro c'è una valutazione a stelle, basata sull'area di copertura del thread su cui quel libro afferma di concentrarsi, non solo una media dei tre attributi sopra elencati. Una stella indica un lavoro scadente; il punteggio più alto (cinque stelle) indica una copertura eccezionale.

Thread Java

La prima edizione di Java Threads, di Scott Oaks e Henry Wong, è stata la risorsa definitiva originale per imparare a programmare con i thread. Mentre la maggior parte dei libri introduttivi esaminava cosa fosse un thread e come utilizzare la Threadclasse con l' Runnableinterfaccia, Java Threads forniva le informazioni aggiuntive necessarie per utilizzarli in modo efficace. La seconda edizione segue le sue orme: include informazioni aggiornate sull'utilizzo dei thread con la piattaforma Java 2, informazioni sulle API deprecate, sull'interruzione dell'I / O e sulle modifiche alla sicurezza di Java 2. Il libro copre anche i problemi di multithreading con il set di componenti Swing e fornisce assistenza con il supporto della pianificazione nativa e l'utilizzo di macchine multiprocessore.

Se sei nuovo nella programmazione Java e non hai ancora conquistato i thread, Java Threads è una risorsa eccellente. Potrai dare un'occhiata alle basi del threading Java e apprendere le tecniche necessarie per far funzionare correttamente i tuoi programmi in un mondo multithread.

Programmazione concorrente in Java

Mentre Java Threads spiega i dettagli di basso livello dell'utilizzo dell'API Threads, Concurrent Programming in Java, di Doug Lea, esplora la progettazione corretta di programmi multithread. Sapere come usare l'API non è sufficiente nel mondo Java; dovresti anche spendere tempo ed energia per ottenere il giusto design del tuo programma. In questa luce, Concurrent Programming è principalmente un libro di design patterns. Dato un certo problema, puoi cercare il modello definito nel libro e il tuo programma praticamente si scrive da solo.

La programmazione simultanea è suddivisa in quattro aree che descrivono diversi modelli di utilizzo. La sezione "Programmazione simultanea orientata agli oggetti" inizia con le basi. La sezione "Esclusione" descrive i pattern per l'utilizzo della synchronizedparola chiave. "State dependance" esplora i temi con e modelli per utilizzando i wait(), notify()ei notifyAll()metodi della Objectclasse. La sezione finale, "Creazione di thread", riguarda i modelli per l'utilizzo della Threadclasse.

Questo libro si rivolge sicuramente all'utente avanzato e non è per i deboli di cuore. Ci si aspetta che tu abbia una buona conoscenza della programmazione orientata agli oggetti e del linguaggio di programmazione Java, e manchi solo nell'area della progettazione di programmi per problemi di concorrenza. Oltre al libro, Lea rende disponibile gratuitamente la libreria util.concurrent sul sito web del libro. (Vedi Risorse per un collegamento.) La libreria ti aiuterà a progettare e sviluppare programmi multithread.

Domare i thread Java

Taming Java Threads di Allen Holub , è nato qui a JavaWorld come una serie di Java Toolbox in nove parti. Gli articoli da allora sono stati aggiornati e ora formano il contenuto del libro, insieme a un nuovo capitolo interessante che descrive i problemi con l'API di threading di Java. (Vedi Risorse per un collegamento a quella sezione, intitolato "If I Were King"). L' addomesticamento è diverso dai primi due libri che ho recensito; si tratta esclusivamente di tecniche per utilizzare correttamente l'API. Non è un'introduzione ai thread o un libro di design patterns. È disponibile anche una libreria di codici (vedere Risorse per un collegamento) in modo da poter trarre vantaggio da ciò che si è appreso. Assicurati di leggere il contratto di licenza, però; non è di pubblico dominio o open source.

Dopo aver descritto l'architettura di base del modello multithreading di Java, Holub spiega i pericoli dell'utilizzo di thread e tecniche per utilizzarli in modo sicuro. Imparerai a creare e utilizzare mutex, semafori e variabili condizionali. Acquisirai familiarità con le differenze tra Swing invokeLater()e invokeAndWait()metodi. Holub esplora anche la AWTEventMulticasterclasse e mostra come è thread-safe con un sovraccarico minimo e come puoi lavorare con i pool di thread. Dopo tutto è stato detto e fatto, avrai una conoscenza eccellente dei limiti e dell'utilizzo del modello di threading Java.

Sono rimasto sorpreso di vedere alcuni errori tecnici nel libro - nella prefazione, nientemeno - ma ciò non ha sminuito le eccellenti informazioni che il libro offre. Tuttavia, dopo aver visto continuamente il codice Java formattato con maiuscole e minuscole, sono rimasto un po 'sorpreso dal fatto che il codice di Holub fosse formattato con il carattere di sottolineatura tra le parole nelle variabili e nei nomi dei metodi. Potrebbe essere necessario leggere i blocchi di codice più volte prima di comprenderli completamente, ma la qualità delle informazioni fornite qui vale l'inconveniente. Un'ultima nota: tutto il codice sorgente è completamente commentato da javadoc.

Programmazione di thread Java

Java Thread Programming, di Paul Hyde, compete direttamente con Java Threads. Si rivolge chiaramente allo sviluppatore inesperto e include una copertura aggiuntiva su argomenti e tecniche più avanzati per quando lo sviluppatore "cresce". Questo libro è il più grande del gruppo e lo spazio viene utilizzato al meglio.

La prima metà della programmazione dei thread Java spiega cosa sono i thread e come lavorare con le basi. Ottieni la descrizione tipica della creazione di thread e dell'utilizzo Runnabledell'interfaccia. C'è un capitolo su come fermare i thread, incluso come sospenderli e riprenderli senza usare i metodi deprecati: buone tecniche per aumentare la produttività. Oltre a coprire wait()e notify(), Hyde descrive in dettaglio la volatileparola chiave e la comunicazione tra i thread attraverso i tubi I / O. Java Thread Programming ha anche la migliore copertura delle classi ThreadLocale InheritableThreadLocal, oltre alla normale copertura di thread e Swing che si trova in altri libri.

La parte 2 della programmazione dei thread Java descrive le tecniche per lavorare con i thread Java. Offre la migliore copertura di thread-pooling e un ottimo capitolo sull'uscita dall'I / O bloccato. Non rimarrai deluso da questa selezione.

Programmazione multithread con tecnologia Java

Mi sembra di trovare sempre almeno un libro che non è proprio come gli altri: Multithreaded Programming with Java Technology, di Bil Lewis e Daniel Berg, è proprio una bestia. Ho ancora dato una valutazione a stelle, ma questo libro merita una menzione speciale. A mio parere, la programmazione multithread 'Lo scopo principale di s non è insegnarti a programmare con thread in Java. Ti aiuterà in quell'area, ma il suo scopo principale sembra essere quello di insegnarti come funziona l'architettura del thread sottostante, sia all'interno della Java Virtual Machine (Java VM) che dei sistemi operativi sottostanti. In effetti, non solo ottieni molti degli esempi di codice del libro in codice Java, ma ottieni anche codice POSIX e codice per la gestione dei thread API Win32. Se ci fossero esercizi per i lettori alla fine di ogni capitolo, funzionerebbero bene come un testo universitario.

Detto questo, quanto bene la programmazione multithread ti insegna a usare i thread? Assomiglia molto a Java Threads ; il suo obiettivo principale è insegnarti cos'è un thread e come usarlo. Mostra anche come funziona tutto sotto il cofano in Java VM, come tutto è pianificato all'interno di Java VM e così via. Inoltre, ottieni la copertura di argomenti tipici del threading come sincronizzazione, deadlock e condizioni di competizione. Lewis e Berg coprono anche i problemi dei thread con RMI e tecniche di ottimizzazione per migliorare le prestazioni. Tutto sommato, questo è un buon libro, ma non la tipica presentazione dei thread Java.

Per quanto riguarda gli esempi del libro, fai attenzione che Elvis venga catturato dagli UFO.

Piattaforma Java ad alte prestazioni

Il check-in con il titolo più lungo è High Performance Java Platform Computing: Multithreaded and Networked Programming, di Thomas Christopher e George Thiruvathukal. Anche i cognomi degli autori sono lunghi almeno il doppio di quelli della concorrenza! L'eccesso non si ferma qui; anche questo libro costa oltre il 25 per cento in più rispetto agli altri.

Basta con l'esterno - cosa c'è dentro? High Performance passa direttamente a una discussione sul calcolo parallelo. Imparerai a conoscere la macchina di von Neumann, la tassonomia di Flynn, l'accelerazione lineare e la legge di Amdahl, tutto nel Capitolo 1. Il Capitolo 2 esplora la creazione di thread in modo più approfondito rispetto alla maggior parte delle introduzioni all'API. Dopo una dimostrazione delle condizioni di gara, il Capitolo 3 discute la sincronizzazione e perché ne hai bisogno. Il Capitolo 4 approfondisce i monitor, con molte variazioni sui problemi di blocco lettore-scrittore. Nel Capitolo 5, gli autori discutono l'uso della memoria condivisa - sull'heap, non sulla varietà del sistema Unix - il tutto allo scopo di avere un pool di thread. Il resto del libro copre i modelli per lo sviluppo di applicazioni per l'esecuzione parallela.

Ci sono molte buone informazioni qui sul calcolo parallelo, ma l' obiettivo di High Performance non è realmente quello di insegnare la programmazione dei thread per scopi generali. Sembra essere sviluppato principalmente come testo per un corso di calcolo parallelo: ogni capitolo si conclude con una serie di esercizi ponderati, a cui non sono riuscito a trovare alcuna risposta.

Continuo a consigliare lo stesso?

Le prime edizioni di Concurrent Programming in Java e Java Threads sono uscite nel 1997 e sono state altamente consigliate. Sto solo raccomandando ciecamente la loro seconda edizione? Insomma, sembra che il Concurrent Programming di Lea sia ancora un'ottima risorsa per chi sta imparando a progettare programmi per il mondo multithread. Non è una lettura facile, ma i modelli di progettazione e le tecniche spiegati nel libro sono strumenti eccellenti per sviluppatori Java seri.

D'altra parte, sembra che Java Threads sia stato sostituito da Java Thread Programming di Sams come il miglior libro per principianti. Non c'è niente di tecnicamente sbagliato nell'offerta O'Reilly, ma Java Thread Programming funziona meglio come introduzione ai thread Java. Hyde va anche oltre il materiale introduttivo, offrendo tecniche più avanzate per un extra.

Se hai le prime edizioni di Java Threads e Concurrent Programming in Java, vale la pena ricevere gli aggiornamenti? Potrei consigliare di prendere la seconda edizione di Lea e di trasmettere Java Threads. Se hai la prima edizione di Java Threads, probabilmente sei andato oltre la necessità di una seconda ormai. Se hai ancora bisogno di un testo introduttivo, prendi invece Java Thread Programming di Sams .

Cosa fare con il resto? È davvero una chiamata difficile e dipende da quale centesimo stai spendendo. Se potessi avere solo un altro libro sui thread, sceglierei la programmazione multithread con tecnologia Java. La sua copertura dei thread è unica e abbastanza utile da renderla una bella aggiunta a una libreria. Holub's Taming Java Threads contiene alcune tecniche interessanti per ottenere il massimo dalla programmazione dei thread. Non sono sicuro che sia una risorsa necessaria, però. Il calcolo della piattaforma Java ad alte prestazioni sembra appropriato per coloro che sono interessati al mondo del calcolo parallelo. Altrimenti, lo lascerei sullo scaffale.

John Zukowski è un consulente Java indipendente, autore della Definitive Guide to Swing for Java 2, Second Edition di Apress, Mastering Java 2 di Sybex e Java AWT Reference di O'Reilly, nonché della guida About's Focus on Java.