Programmering

Java-tråde: En komparativ boganmeldelse

Lige siden de første udgaver af Java-tråde fra O'Reilly og Samtidig programmering i Java fra Addison-Wesley kom ud for flere år siden, har jeg anbefalet dem til folk, der ønsker at lære at bruge tråde. Med flere konkurrerende bøger og andenudgaver af originalerne, der nu er tilgængelige, har jeg besluttet at revurdere mine anbefalinger. I denne artikel vil jeg se på seks af de nyeste Java-trådprogrammeringsbøger.

De seks gennemgåede bøger er:

  1. Java-tråde, anden udgave, Scott Oaks og Henry Wong (O'Reilly)
  2. Samtidig programmering i Java, anden udgave, Doug Lea (Addison-Wesley)
  3. Tamning af Java-tråde, Allen Holub (Apress)
  4. Java-trådprogrammering, Paul Hyde (Sams)
  5. Multitrådet programmering med Java-teknologi, Bil Lewis og Daniel Berg (Prentice Hall, Sun Press)
  6. High Performance Java Platform Computing: Multitrådet og netværksprogrammering, Thomas Christopher og George Thiruvathukal (Prentice Hall, Sun Press)

Nedenstående tabel giver en hurtig gennemgang af de seks bøgernes vigtigste egenskaber.

Alle bøger er baseret på 1.2.x-udgivelsen af ​​Java 2-platformen.
Trådbøger Oversigt
 Java-trådeSamtidig programmeringTamning af Java-trådeJava-trådprogrammeringMultitrådet programmeringJava med høj ydeevne
Pris2.959.954.954.999.999.99
I alt sider320410300510460410
CD-ROM / kilde fra internettetNej JaNej JaNej JaNej JaNej JaNej Ja
Tråd GrundlæggendeFremragendeRetfærdigIngenFremragendeFremragendeRetfærdig
TeknikkerMeget godtgodtMeget godtFremragendegodtMeget godt
DesignmønstreIngenFremragendeFattigeIngenIngengodt
Skala: Ingen, dårlig, gennemsnitlig, god, meget god, fremragende

Tabellen skal være ret selvforklarende op til CD-ROM-attributten. Lad mig yderligere forklare de sidste par rækker:

  • Trådens grundlæggende attribut angiver, i hvilket omfang bøgerne beskriver, hvad en tråd er, og hvordan man bruger den: beskrivelse af Tråd klasse og Kan køres interface, den Objekt metoder til vente(), underrette()og notifyAll (), og synkroniseret nøgleord.
  • Attributten Teknikker evaluerer, hvor godt bøgerne udforsker teknikker ved brug af tråde.
  • Design Patterns-attributten måler bogenes forklaring på, hvordan man opretter trådbaseret programmering efter veldefinerede designmønstre.

Dernæst vil jeg gennemgå hver bog. Ved siden af ​​hver bogs titel er der en stjernebedømmelse baseret på det tråddækningsområde, som den bog hævder at fokusere på, ikke kun et gennemsnit af de tre attributter, der er anført ovenfor. En stjerne angiver et dårligt job; den højeste vurdering (fem stjerner) angiver enestående dækning.

Java-tråde

Den første udgave af Java-tråde, af Scott Oaks og Henry Wong, var den oprindelige endelige ressource til at lære at programmere med tråde. Mens de fleste introduktionsbøger gik over, hvad en tråd var, og hvordan man bruger Tråd klasse med Kan køres interface, Java-tråde de supplerende oplysninger, der er nødvendige for effektivt at bruge dem. Den anden udgave følger i dens fodspor: den indeholder opdaterede oplysninger om brug af tråde med Java 2-platformen, information om de forældede API'er, afbrydelse af I / O og Java 2-sikkerhedsændringer. Bogen dækker også problemer med multithreading med Swing-komponentsættet og giver hjælp til indbygget planlægningsstøtte og arbejde med multiprocessormaskiner.

Hvis du er ny med Java-programmering og endnu ikke erobret tråde, Java-tråde er en fremragende ressource. Du får et kig på det grundlæggende i Java-threading og lærer de teknikker, der er nødvendige for at få dine programmer til at fungere korrekt i en multitrådet verden.

Samtidig programmering i Java

Mens Java-tråde forklarer detaljerne på lavt niveau ved brug af Threads API, Samtidig programmering i Java, af Doug Lea, udforsker korrekt design af multitrådede programmer. At vide, hvordan man bruger API'et, er ikke tilstrækkeligt i Java-verdenen. du skal også bruge tid og energi på at få dit programdesign rigtigt. I det lys, Samtidig programmering er primært en designmønsterbog. I betragtning af et bestemt problem kan du slå op i det mønster, der er defineret i bogen, og dit program skriver praktisk talt sig selv.

Samtidig programmering er opdelt i fire områder, der beskriver forskellige brugsmønstre. Afsnittet "Samtidig objektorienteret programmering" starter dig med det grundlæggende. Afsnittet "Udelukkelse" beskriver mønstre til brug af synkroniseret nøgleord. "State Dependence" udforsker problemer med og mønstre til brug af vente(), underrette()og notifyAll () metoder til Objekt klasse. Det sidste afsnit, "Oprettelse af tråde", handler om mønstre til brug af Tråd klasse.

Denne bog henvender sig bestemt til den avancerede bruger og er ikke for svag af hjertet. Det forventes, at du har et godt kendskab til objektorienteret programmering og Java-programmeringssprog, og kun mangler inden for design af programmer til samtidige problemer. Ud over bogen gør Lea util.concurrent-biblioteket frit tilgængeligt på bogens websted. (Se ressourcer for et link.) Biblioteket hjælper dig med at designe og udvikle multitrådede programmer.

Tamning af Java-tråde

Allen Holubs Tamning af Java-tråde, stammer her fra JavaWorld som en ni-delt Java Toolbox-serie. Artiklerne er siden blevet opdateret og danner nu bogens indhold sammen med et interessant nyt kapitel, der beskriver problemerne med Java's threading API. (Se ressourcer for et link til dette afsnit med titlen "Hvis jeg var konge.") Tamning er i modsætning til de to første bøger, jeg har gennemgået; det handler strengt taget om teknikker til korrekt brug af API. Det er ikke en introduktion til tråde eller en designmønsterbog. Et kodebibliotek (se Ressourcer for et link) er også tilgængeligt, så du kan drage fordel af det, du har lært. Sørg dog for at læse licensaftalen; det er ikke public domain eller open source.

Efter at have beskrevet den grundlæggende arkitektur i Java's multithreading-model forklarer Holub farerne ved at bruge tråde og teknikker til at bruge dem sikkert. Du lærer at oprette og bruge mutexes, semaforer og betingede variabler. Du bliver fortrolig med forskellene mellem gynger påkaldeLater () og påkaldeAndWait () metoder. Holub udforsker også AWTEventMulticaster klasse og viser, hvordan det er trådsikkert med minimal overhead, og hvordan du kan arbejde med trådpuljer. Når alt er sagt og gjort, har du en fremragende forståelse af begrænsningerne og brugen af ​​Java-threading-modellen.

Jeg var overrasket over at se nogle tekniske fejl i bogen - ikke i forordet - men det mindskede ikke den fremragende information, bogen tilbyder. Efter stadig at have set Java-kode formateret med blandet sag, var jeg dog lidt overrasket over, at Holubs kode blev formateret med understregningstegnet mellem ord i variabler og metodenavne. Det kan være nødvendigt at du læser kodeblokkene flere gange, før du forstår dem fuldt ud, men kvaliteten af ​​oplysningerne her er ulejligheden værd. En sidste note: hele kildekoden er fuldt javadoc-kommenteret.

Java-trådprogrammering

Java-trådprogrammering, af Paul Hyde, konkurrerer direkte med Java-tråde. Det er målrettet mod nybegynderudvikleren og inkluderer yderligere dækning af mere avancerede emner og teknikker til, hvornår udvikleren "vokser op". Denne bog er den største af bunken, og pladsen udnyttes godt.

Den første halvdel af Java-trådprogrammering forklarer, hvad tråde er, og hvordan man arbejder med det grundlæggende. Du får den typiske beskrivelse af oprettelse af tråde og brug af Kan køres interface. Der er et kapitel om, hvordan man stopper tråde, herunder hvordan man suspenderer og genoptager dem uden at bruge de forældede metoder - gode teknikker til at øge produktiviteten. Ud over at dække vente() og underrette(), Beskriver Hyde detaljeret flygtige nøgleord og interthread kommunikation gennem I / O-rør. Java-trådprogrammering har også den bedste dækning af Trådlokal og InheritableThreadLocal klasser, ud over den sædvanlige dækning af tråde og gynger, der findes i andre bøger.

Del 2 af Java-trådprogrammering beskriver teknikker til at arbejde med Java-tråde. Det giver den bedste tråd-pooling-dækning og et godt kapitel om at bryde ud af blokeret I / O. Du bliver ikke skuffet over dette valg.

Multitrådet programmering med Java-teknologi

Det ser ud til, at jeg altid finder mindst en bog, der ikke ligner de andre - Multitrådet programmering med Java-teknologi, af Bil Lewis og Daniel Berg, er netop sådan et dyr. Jeg har stadig givet det en stjernebedømmelse, men denne bog fortjener særlig omtale. Efter min mening, Multitrådet programmering 's primære formål er ikke at lære dig at programmere med tråde i Java. Det hjælper dig i dette område, men dets primære formål synes at være at lære dig, hvordan den underliggende trådarkitektur fungerer, både inden for Java Virtual Machine (Java VM) og de underliggende operativsystemer. Faktisk får du ikke kun mange af bogens kodeeksempler i Java-kode, du får også POSIX-kode og kode til Win32 API-trådhåndtering. Hvis der var læserøvelser i slutningen af ​​hvert kapitel, ville dette fungere godt som en kollegietekst.

Når det er sagt, hvor godt gør det Multitrådet programmering lære dig at bruge tråde? Det ligner mest Java-tråde; dets hovedmål er at lære dig, hvad en tråd er, og hvordan du bruger den. Det viser også, hvordan alt under emhætten fungerer i Java VM, hvordan alt er planlagt inden for Java VM osv. Derudover får du dækning af typiske trådemner som synkronisering, deadlocks og race betingelser. Lewis og Berg dækker endda trådproblemer med RMI og optimeringsteknikker for at forbedre ydeevnen. Alt i alt er dette en god bog - bare ikke din typiske præsentation af Java-tråde.

Hvad bogens eksempler angår, skal du passe på, at Elvis bliver fanget af UFO'erne.

High Performance Java Platform Computing

Check-in med den længste titel er High Performance Java Platform Computing: Multithreaded og Networked Programming, af Thomas Christopher og George Thiruvathukal. Selv forfatternes efternavne er mindst dobbelt så lange som deres konkurrences! Overskuddet stopper ikke der; denne bog koster også over 25 procent mere end de andre.

Nok om det udvendige - hvad er der indeni? Høj ydeevne springer lige ind i en diskussion af parallel computing. Du lærer om von Neumann-maskinen, Flynns taksonomi, lineær hastighed og Amdahls lov, alt sammen i kapitel 1. Kapitel 2 udforsker tråddannelse mere dybtgående end de fleste introduktioner til API'et. Efter en demonstration af raceforhold diskuterer kapitel 3 synkronisering, og hvorfor du har brug for det. Kapitel 4 går dybt ned i skærme med mange variationer i låseproblemer med læserskrivere. I kapitel 5 diskuterer forfatterne brugen af ​​delt hukommelse - på bunken, ikke Unix-systemvarianten - alt sammen med det formål at have en trådpulje. Resten af ​​bogen dækker mønstre til udvikling af applikationer til parallel udførelse.

Der er masser af gode oplysninger her om parallel computing, men Høj ydeevne's mål er ikke rigtig at undervise i trådprogrammering til generelle formål. Det ser ud til at være udviklet primært som en tekst til et parallelt computerkursus - hvert kapitel slutter med en række tankevækkende øvelser, som jeg ikke kunne finde svar på.

Fortsætter jeg med at anbefale det samme?

De første udgaver af Samtidig programmering i Java og Java-tråde kom ud i 1997 og blev stærkt anbefalet. Anbefaler jeg bare blindt deres anden udgave? Kort sagt ser det ud til, at Lea er Samtidig programmering er stadig en fremragende ressource for dem, der lærer at designe programmer til den multitrådede verden. Det er ikke let at læse, men designmønstre og teknikker, der er forklaret i bogen, er fremragende værktøjer til seriøse Java-udviklere.

På den anden side ser det ud Java-tråde er blevet efterfulgt af Sams Java-trådprogrammering som den bedste bog for begyndere. Intet er teknisk forkert med O'Reilly-tilbudet, men Java-trådprogrammering fungerer bedre som en introduktion til Java-tråde. Hyde går endda ud over det indledende materiale og tilbyder mere avancerede teknikker til en ekstra.

Hvis du har de første udgaver af Java-tråde og Samtidig programmering i Java, er opdateringerne værd at få? Jeg kan anbefale at få Lea's anden udgave og videregive Java-tråde. Hvis du har den første udgave af Java-tråde, du er sandsynligvis gået ud over behovet for en anden nu. Hvis du stadig har brug for en indledningstekst, skal du hente Sams Java-trådprogrammering i stedet.

Hvad skal man gøre med resten? Det er virkelig et hårdt opkald og afhænger af, hvis skilling du bruger. Hvis jeg kun kunne få endnu en trådbog, ville jeg vælge Multitrådet programmering med Java-teknologi. Dens tråddækning er unik og nyttig nok til at gøre det til en god tilføjelse til et bibliotek. Holub's Tamning af Java-tråde indeholder nogle gode teknikker til at få mest muligt ud af trådprogrammering. Jeg er dog ikke sikker på, om det er en nødvendig ressource. High Performance Java Platform Computing synes passende for dem, der er interesserede i den parallelle computerverden. Ellers ville jeg lade det være på hylden.

John Zukowski er en uafhængig Java-konsulent, forfatter til Definitive Guide to Swing for Java 2, anden udgave fra Apress, Mastering Java 2 fra Sybex og Java AWT Reference fra O'Reilly samt About's Fokus på Java-guide.