Od prvních vydání Vlákna Java od O'Reillyho a Souběžné programování v Javě z Addison-Wesley vyšel před několika lety, doporučuji je lidem, kteří se chtějí naučit používat vlákna. S několika konkurenčními knihami a druhým vydáním originálů, které jsou nyní k dispozici, jsem se rozhodl přehodnotit svá doporučení. V tomto článku se podívám na šest nejnovějších knih o programování podprocesů Java.
Šest recenzovaných knih je:
- Vlákna Java, druhé vydání, Scott Oaks a Henry Wong (O'Reilly)
- Souběžné programování v Javě, druhé vydání, Doug Lea (Addison-Wesley)
- Zkrocení vláken Java, Allen Holub (Apress)
- Programování podprocesů Java, Paul Hyde (Sams)
- Vícevláknové programování s technologií Java, Bil Lewis a Daniel Berg (Prentice Hall, Sun Press)
- Vysoce výkonné Java Platform Computing: multithreadové a síťové programování, Thomas Christopher a George Thiruvathukal (Prentice Hall, Sun Press)
Níže uvedená tabulka poskytuje rychlý přehled hlavních charakteristik šesti knih.
Přehled knih vláken | ||||||
---|---|---|---|---|---|---|
Vlákna Java | Souběžné programování | Zkrocení vláken Java | Programování podprocesů Java | Vícevláknové programování | Vysoce výkonná Java | |
Cena | 2.95 | 9.95 | 4.95 | 4.99 | 9.99 | 9.99 |
Celkový počet stránek | 320 | 410 | 300 | 510 | 460 | 410 |
CD-ROM / Zdroj z webu | Žádné ano | Žádné ano | Žádné ano | Žádné ano | Žádné ano | Žádné ano |
Základy závitů | Vynikající | Veletrh | Žádný | Vynikající | Vynikající | Veletrh |
Techniky | Velmi dobře | Dobrý | Velmi dobře | Vynikající | Dobrý | Velmi dobře |
Designové vzory | Žádný | Vynikající | Chudý | Žádný | Žádný | Dobrý |
Měřítko: Žádné, Špatné, Průměrné, Dobré, Velmi dobré, Vynikající |
Tabulka by měla být zcela vysvětlující až po atribut CD-ROM. Dovolte mi dále vysvětlit několik posledních řádků:
- Atribut Thread Basics udává, do jaké míry knihy popisují, co je vlákno a jak jej používat: popis
Vlákno
třída aSpustitelný
rozhraní,Objekt
metodyPočkejte()
,oznámit()
, anotifyAll ()
asynchronizované
klíčové slovo. - Atribut Techniques hodnotí, jak dobře knihy prozkoumávají techniky při používání vláken.
- Atribut Design Patterns měří vysvětlení knih o tom, jak vytvořit programování na základě vláken podle přesně definovaných vzorů návrhu.
Dále přezkoumám každou knihu. Vedle názvu každé knihy je hvězdičkové hodnocení, založené na oblasti pokrytí vláken, na které se tato kniha prohlašuje, že se zaměřuje, nejen průměr ze tří výše uvedených atributů. Jedna hvězda označuje špatnou práci; nejvyšší hodnocení (pět hvězdiček) označuje výjimečné pokrytí.
Vlákna Java
První vydání Java vlákna, Scott Oaks a Henry Wong, byl původním definitivním zdrojem pro učení programování pomocí vláken. Zatímco většina úvodních knih se zabývala tím, co je vlákno a jak používat Vlákno
třída s Spustitelný
rozhraní, Vlákna Java poskytl další informace nezbytné k jejich efektivnímu využití. Druhé vydání jde ve stopách: obsahuje aktualizované informace o používání vláken s platformou Java 2, informace o zastaralých API, přerušení I / O a změny zabezpečení Java 2. Kniha také pokrývá problémy multithreadingu se sadou komponent Swing a poskytuje nápovědu s podporou nativního plánování a prací s víceprocesorovými stroji.
Pokud jste v programování v Javě nováčkem a ještě jste dobyli vlákna, Vlákna Java je vynikajícím zdrojem. Získáte pohled na základy Java threadingu a naučíte se techniky potřebné k tomu, aby vaše programy správně fungovaly ve světě s více vlákny.
Souběžné programování v Javě
Zatímco Vlákna Java vysvětluje podrobnosti na nízké úrovni používání Threads API, Souběžné programování v Javě, Doug Lea zkoumá správný design vícevláknových programů. Znalost používání API není ve světě Java dostatečná; měli byste také věnovat čas a energii, abyste dosáhli správného návrhu programu. V tomto světle Souběžné programování je hlavně kniha návrhových vzorů. Vzhledem k určitému problému můžete vyhledat vzor definovaný v knize a váš program se prakticky sám zapíše.
Souběžné programování je rozdělena do čtyř oblastí, které popisují různé vzorce použití. Sekce „Souběžné objektově orientované programování“ vás seznámí se základy. Sekce „Vyloučení“ popisuje vzorce pro používání souboru synchronizované
klíčové slovo. "Závislost na státu" zkoumá problémy a vzorce pro používání Počkejte()
, oznámit()
, a notifyAll ()
metody Objekt
třída. Poslední část „Vytváření vláken“ je o vzorcích pro použití Vlákno
třída.
Tato kniha rozhodně vyhovuje pokročilým uživatelům a není pro slabé povahy. Očekává se, že budete mít dobrý přehled o objektově orientovaném programování a programovacím jazyce Java a že vám bude chybět pouze v oblasti navrhování programů pro problémy se souběžností. Kromě knihy Lea bezplatně zpřístupňuje knihovnu util.concurrent na webových stránkách knihy. (Odkaz najdete v Zdrojích.) Knihovna vám pomůže navrhnout a vyvinout vícevláknové programy.
Zkrocení vláken Java
Allena Holuba Zkrocení vláken Java, vznikl zde v JavaWorld jako devítidílná řada Java Toolbox. Články byly od té doby aktualizovány a nyní tvoří obsah knihy, spolu se zajímavou novou kapitolou, která popisuje problémy s Java Threading API. (Viz Zdroje pro odkaz na tuto část s názvem „Kdybych byl králem.“) Zkrocení je na rozdíl od prvních dvou knih, které jsem recenzoval; jde výhradně o techniky správného používání API. Není to úvod do vláken nebo kniha návrhových vzorů. K dispozici je také knihovna kódů (viz Zdroje pro odkaz), abyste mohli využít toho, co jste se naučili. Nezapomeňte si přečíst licenční smlouvu; není public domain ani open source.
Po popisu základní architektury vícevláknového modelu Java vysvětluje Holub nebezpečí používání vláken a techniky jejich bezpečného používání. Naučíte se vytvářet a používat mutexy, semafory a podmíněné proměnné. Seznámíte se s rozdíly mezi Swingovými invokeLater ()
a invokeAndWait ()
metody. Holub také zkoumá AWTEventMulticaster
třídy a ukazuje, jak je to bezpečné pro vlákna s minimální režií a jak můžete pracovat s fondy vláken. Koneckonců je vše řečeno a hotovo, budete mít vynikající přehled o omezeních a použití modelu vláken Java.
Byl jsem překvapen, když jsem viděl některé technické chyby v knize - v předmluvě, neméně - ale to neubralo na vynikajících informacích, které kniha nabízí. Poté, co jsem neustále viděl kód Java naformátovaný smíšeným písmem, byl jsem však trochu překvapen, že Holubův kód byl naformátován znakem podtržítka mezi slovy v proměnných a názvech metod. Možná budete muset několikrát přečíst bloky kódu, než jim plně porozumíte, ale kvalita zde poskytovaných informací stojí za nepříjemnosti. Jedna poznámka na závěr: celý zdrojový kód je plně komentován javadocem.
Programování podprocesů Java
Programování podprocesů Java, Paul Hyde, přímo soutěží s Vlákna Java. Jasně se zaměřuje na začínajícího vývojáře a zahrnuje další pokrytí pokročilejších témat a technik, kdy tento vývojář „vyroste“. Tato kniha je největší ze skupiny a prostor je dobře využit.
První polovina roku Programování podprocesů Java vysvětluje, co jsou vlákna a jak pracovat se základy. Získáte typický popis vytváření vláken a používání Spustitelný
rozhraní. Existuje kapitola o tom, jak zastavit vlákna, včetně toho, jak je pozastavit a obnovit bez použití zastaralých metod - pěkné techniky pro zvýšení produktivity. Kromě krytí Počkejte()
a oznámit()
, Hyde podrobně popisuje nestálý
klíčové slovo a komunikace mezi vlákny přes I / O kanály. Programování podprocesů Java má také nejlepší pokrytí ThreadLocal
a InheritableThreadLocal
třídy, kromě obvyklého pokrytí vláken a Swingu, které najdete v jiných knihách.
Část 2 z Programování podprocesů Java popisuje techniky pro práci s vlákny Java. Nabízí nejlepší pokrytí sdílení vláken a skvělou kapitolu o vyřazení blokovaných I / O. Z tohoto výběru nebudete zklamáni.
Vícevláknové programování s technologií Java
Zdá se, že vždy najdu alespoň jednu knihu, která není úplně jako ostatní - Vícevláknové programování s technologií Java, Bil Lewis a Daniel Berg, je takové zvíře. Stále jsem mu dal hodnocení hvězdičkami, ale tato kniha si zaslouží zvláštní zmínku. Dle mého názoru, Programování s více vlákny 'Primárním účelem není naučit vás programovat pomocí vláken v Javě. Pomůže vám v této oblasti, ale zdá se, že jeho hlavním účelem je naučit vás, jak funguje architektura podprocesů podprocesů, a to jak v rámci Java Virtual Machine (Java VM), tak v podkladových operačních systémech. Ve skutečnosti získáte nejen mnoho příkladů kódu knihy v kódu Java, ale také získáte POSIX kód a kód pro zpracování podprocesů Win32 API. Pokud by na konci každé kapitoly byla čtenářská cvičení, fungovalo by to dobře jako vysokoškolský text.
To znamená, jak dobře to jde Vícevláknové programování vás naučí používat vlákna? Nejvíc se to podobá Vlákna Java; jeho hlavním cílem je naučit vás, co je vlákno a jak jej používat. Ukazuje také, jak vše pod kapotou funguje v prostředí Java VM, jak je vše naplánováno v prostředí Java VM atd. Kromě toho získáte pokrytí typických témat vláken, jako je synchronizace, zablokování a podmínky závodu. Lewis a Berg dokonce pokrývají problémy vláken pomocí RMI a optimalizačních technik pro zlepšení výkonu. Celkově vzato je to dobrá kniha - prostě ne vaše typická prezentace vláken Java.
Pokud jde o příklady z knihy, dejte si pozor na Elvise, který byl chycen UFO.
Vysoce výkonná platforma Java
Ohlášení s nejdelším titulem je Vysoce výkonná platforma Java: Výpočetní a síťové programování, Thomas Christopher a George Thiruvathukal. Dokonce i příjmení autorů jsou minimálně dvojnásobná oproti délce jejich konkurence! Přebytek tím nekončí; tato kniha také stojí o více než 25 procent více než ostatní.
Dost venku - co je uvnitř? Vysoký výkon skočí přímo do diskuse o paralelních výpočtech. Dozvíte se o von Neumannově stroji, Flynnově taxonomii, lineárním zrychlení a Amdahlově zákoně, vše v kapitole 1. Kapitola 2 zkoumá vytváření podprocesů hlouběji než většina úvodů do API. Po předvedení podmínek závodu popisuje kapitola 3 synchronizaci a proč ji potřebujete. Kapitola 4 se hlouběji věnuje monitorům s mnoha variantami problémů se zámkem čtečky a zapisovače. V kapitole 5 autoři diskutují o použití sdílené paměti - na hromadě, nikoli o unixové odrůdě systému - vše za účelem vytvoření fondu vláken. Zbytek knihy pokrývá vzory pro vývoj aplikací pro paralelní provádění.
O paralelních výpočtech je zde spousta dobrých informací, ale Vysoký výkon'Cílem není ve skutečnosti učit programování podprocesů pro všeobecné účely. Vypadá to, že je vyvíjen hlavně jako text pro kurz paralelních výpočtů - každá kapitola končí sérií promyšlených cvičení, na která se mi nepodařilo najít žádné odpovědi.
Doporučuji to samé?
První vydání Souběžné programování v Javě a Vlákna Java vyšlo v roce 1997 a bylo velmi doporučeno. Doporučuji jen slepě jejich druhá vydání? Stručně řečeno, zdá se, že Lea Souběžné programování je stále vynikajícím zdrojem pro ty, kteří se učí navrhovat programy pro vícevláknový svět. Není to snadné čtení, ale designové vzory a techniky vysvětlené v knize jsou vynikajícími nástroji pro seriózní vývojáře Java.
Na druhou stranu se to zdá Vlákna Java byl následován Samsem Programování podprocesů Java jako nejlepší kniha pro začátečníky. S nabídkou O'Reilly není nic technicky špatného, ale Programování podprocesů Java funguje lépe jako úvod do vláken Java. Hyde dokonce jde nad rámec úvodního materiálu a nabízí pokročilejší techniky navíc.
Pokud máte první vydání Vlákna Java a Souběžné programování v Javě, stojí za to získat aktualizace? Možná bych doporučil dostat druhé vydání Lea a předat ho dál Vlákna Java. Pokud máte první vydání Java vlákna, pravděpodobně jste se nyní posunuli nad rámec potřeby druhého. Pokud stále potřebujete úvodní text, vyzvedněte si Sams Programování podprocesů Java namísto.
Co dělat se zbytkem? Je to opravdu těžké volání a záleží na tom, čí desetník utratíte. Kdybych mohl získat jen jednu další knihu vláken, vybral bych si Vícevláknové programování s technologií Java. Jeho pokrytí vláken je jedinečné a dostatečně užitečné, aby se stalo pěkným doplňkem knihovny. Holub Zkrocení vláken Java obsahuje některé pěkné techniky pro maximální využití programování vláken. Nejsem si však jistý, zda je to nezbytný zdroj. Vysoce výkonná výpočetní platforma Java se zdá vhodné pro zájemce o svět paralelních počítačů. Jinak bych to nechal na polici.
John Zukowski je nezávislý konzultant v Javě, autor publikací Definitive Guide to Swing for Java 2, Second Edition od Apress, Mastering Java 2 od Sybex a Java AWT Reference od O'Reilly, stejně jako průvodce About's Focus on Java.