Programmering

Java-tråder: En komparativ bokanmeldelse

Helt siden de første utgavene av Java-tråder fra O'Reilly og Samtidig programmering i Java fra Addison-Wesley kom ut for flere år siden, har jeg anbefalt dem til folk som vil lære å bruke tråder. Med flere konkurrerende bøker og andre utgaver av originalene, som nå er tilgjengelige, har jeg bestemt meg for å vurdere anbefalingene mine på nytt. I denne artikkelen vil jeg se på seks av de nyeste Java-trådprogrammeringsbøkene.

De seks gjennomgåtte bøkene er:

  1. Java Threads, andre utgave, Scott Oaks og Henry Wong (O'Reilly)
  2. Samtidig programmering i Java, andre utgave, Doug Lea (Addison-Wesley)
  3. Taming Java-tråder, Allen Holub (Apress)
  4. Java trådprogrammering, Paul Hyde (Sams)
  5. Flertrådet programmering med Java-teknologi, Bil Lewis og Daniel Berg (Prentice Hall, Sun Press)
  6. Java-plattformsberegning med høy ytelse: flertrådet og nettverksprogrammering, Thomas Christopher og George Thiruvathukal (Prentice Hall, Sun Press)

Tabellen nedenfor gir en rask gjennomgang av de seks bøkers hovedegenskaper.

Alle bøker er basert på 1.2.x-utgivelsen av Java 2-plattformen.
Tråder Bøker Oversikt
 Java-tråderSamtidig programmeringTaming Java-tråderJava trådprogrammeringMultitrådet programmeringHøy ytelse Java
Pris2.959.954.954.999.999.99
Totalt antall sider320410300510460410
CD-ROM / kilde fra nettetNei / JaNei / JaNei / JaNei / JaNei / JaNei / Ja
Tråd GrunnleggendeUtmerketRettferdigIngenUtmerketUtmerketRettferdig
TeknikkerVeldig braGodVeldig braUtmerketGodVeldig bra
Design mønstreIngenUtmerketFattigeIngenIngenGod
Skala: Ingen, dårlig, gjennomsnittlig, god, veldig bra, utmerket

Tabellen skal være ganske selvforklarende opp til CD-ROM-attributtet. La meg forklare de siste radene ytterligere:

  • Thread Basics-attributtet angir i hvilken grad bøkene beskriver hva en tråd er og hvordan du bruker den: å beskrive Tråd klasse og Kjørbar grensesnitt, Gjenstand metoder for vente(), gi beskjed(), og notifyAll (), og synkronisert nøkkelord.
  • Attributtet Techniques evaluerer hvor godt bøkene utforsker teknikker ved bruk av tråder.
  • Design Patterns-attributtet måler bøkenes forklaring på hvordan du lager trådbasert programmering etter veldefinerte designmønstre.

Deretter vil jeg gjennomgå hver bok. Ved siden av hver boks tittel er det en stjerneklassifisering, basert på området for tråddekning som boken hevder å fokusere på, ikke bare et gjennomsnitt av de tre attributtene som er oppført ovenfor. En stjerne indikerer en dårlig jobb; den høyeste vurderingen (fem stjerner) angir eksepsjonell dekning.

Java-tråder

Den første utgaven av Java-tråder, av Scott Oaks og Henry Wong, var den opprinnelige definitive ressursen for å lære å programmere med tråder. Mens de fleste innledende bøker gikk over hva en tråd var og hvordan du bruker Tråd klasse med Kjørbar grensesnitt, Java-tråder ga ytterligere informasjon som er nødvendig for å effektivt bruke dem. Den andre utgaven følger i sine fotspor: den inkluderer oppdatert informasjon om bruk av tråder med Java 2-plattformen, informasjon om utdaterte API-er, forstyrrer I / O og Java 2-sikkerhetsendringene. Boken dekker også problemer med flere tråder med Swing-komponentsettet, og gir hjelp med innfødt planleggingsstøtte og arbeid med flerprosessormaskiner.

Hvis du er ny i Java-programmering og ennå ikke har erobret tråder, Java-tråder er en utmerket ressurs. Du får se på det grunnleggende om Java-threading, og lære teknikkene som er nødvendige for å få programmene til å fungere skikkelig i en flertrådet verden.

Samtidig programmering i Java

Samtidig som Java-tråder forklarer detaljer på lavt nivå ved bruk av Threads API, Samtidig programmering i Java, av Doug Lea, utforsker riktig design av flertrådede programmer. Å vite hvordan man bruker API er ikke tilstrekkelig i Java-verdenen; Du bør også bruke tid og krefter på å få riktig programdesign. I det lyset, Samtidig programmering er hovedsakelig en designmønsterbok. Gitt et visst problem, kan du slå opp mønsteret som er definert i boka, og programmet ditt skriver praktisk talt seg selv.

Samtidig programmering er delt inn i fire områder som beskriver forskjellige bruksmønstre. Avsnittet "Samtidig objektorientert programmering" begynner med det grunnleggende. Avsnittet "Ekskludering" beskriver mønstre for bruk av synkronisert nøkkelord. "State Dependence" utforsker problemer med og mønstre for bruk av vente(), gi beskjed(), og notifyAll () metoder for Gjenstand klasse. Den siste delen, "Opprette tråder", handler om mønstre for bruk av Tråd klasse.

Denne boka henvender seg definitivt til den avanserte brukeren, og er ikke for svak av hjertet. Det forventes at du har god forståelse av objektorientert programmering og Java-programmeringsspråk, og bare mangler innen design av programmer for samtidsproblemer. I tillegg til boka gjør Lea util.concurrent-biblioteket fritt tilgjengelig på bokens nettsted. (Se Ressurser for en lenke.) Biblioteket vil hjelpe deg med å designe og utvikle flertrådede programmer.

Taming Java-tråder

Allen Holub Taming Java-tråder, stammer her fra JavaWorld som en ni-delt Java Toolbox-serie. Artiklene har siden blitt oppdatert og danner nå bokens innhold, sammen med et interessant nytt kapittel som beskriver problemene med Java's threading API. (Se Ressurser for en lenke til den delen, med tittelen "Hvis jeg var konge.") Taming er i motsetning til de to første bøkene jeg anmeldte; det handler strengt tatt om teknikker for riktig bruk av API. Det er ikke en introduksjon til tråder eller en designmønsterbok. Et kodebibliotek (se Ressurser for en lenke) er også tilgjengelig, slik at du kan dra nytte av det du har lært. Sørg for å lese lisensavtalen. det er ikke offentlig domene eller åpen kildekode.

Etter å ha beskrevet den grunnleggende arkitekturen til Java's multithreading-modell, forklarer Holub farene ved å bruke tråder og teknikker for å bruke dem trygt. Du lærer å lage og bruke mutexes, semaforer og betingede variabler. Du blir kjent med forskjellene mellom Swing's påkalleLater () og påkalleAndWait () metoder. Holub utforsker også AWTEventMulticaster klasse og viser hvordan det er trådsikkert med minimal overhead, og hvordan du kan jobbe med trådbassenger. Når alt er sagt og gjort, vil du ha en fantastisk forståelse av begrensningene og bruken av Java-threading-modellen.

Jeg var overrasket over å se noen tekniske feil i boka - i forordet, ikke mindre - men det forringer ikke den gode informasjonen boka tilbyr. Etter å ha kontinuerlig sett Java-kode formatert med blandet bokstav, var jeg imidlertid litt overrasket over at Holubs kode ble formatert med understrekingstegnet mellom ord i variabler og metodenavn. Du må kanskje lese kodeblokkene flere ganger før du forstår dem fullt ut, men kvaliteten på informasjonen som er gitt her er verdt ulempen. En siste merknad: hele kildekoden er fullstendig javadoc-kommentert.

Java trådprogrammering

Java trådprogrammering, av Paul Hyde, konkurrerer direkte med Java-tråder. Den retter seg tydelig mot nybegynnerutvikleren, og inkluderer ytterligere dekning av mer avanserte emner og teknikker for når utvikleren "vokser opp." Denne boka er den største av gjengen, og plassen blir brukt godt.

Første halvdel av Java trådprogrammering forklarer hva tråder er og hvordan du kan arbeide med det grunnleggende. Du får den typiske beskrivelsen av å lage tråder og bruke Kjørbar grensesnitt. Det er et kapittel om hvordan du kan stoppe tråder, inkludert hvordan du kan suspendere og gjenoppta dem uten å bruke de utdaterte metodene - fine teknikker for å øke produktiviteten. I tillegg til å dekke vente() og gi beskjed(), Beskriver Hyde i detalj flyktige nøkkelord og trådkommunikasjon gjennom I / O-rør. Java trådprogrammering har også den beste dekningen av Trådlokal og ArveligThreadLocal klasser, i tillegg til vanlig dekning av tråder og sving som finnes i andre bøker.

Del 2 av Java trådprogrammering beskriver teknikker for å jobbe med Java-tråder. Det gir den beste tråd-pooling dekning og et flott kapittel om å bryte ut av blokkerte I / O. Du vil ikke bli skuffet over dette valget.

Flertrådet programmering med Java-teknologi

Det ser ut til at jeg alltid finner minst en bok som ikke er som de andre - Flertrådet programmering med Java-teknologi, av Bil Lewis og Daniel Berg, er akkurat et slikt dyr. Jeg ga det fremdeles en stjernerangering, men denne boka fortjener spesiell omtale. Etter min mening, Multitrådet programmering 's primære formål er ikke å lære deg å programmere med tråder i Java. Det vil hjelpe deg i det området, men det primære formålet ser ut til å være å lære deg hvordan den underliggende trådarkitekturen fungerer, både innenfor Java Virtual Machine (Java VM) og de underliggende operativsystemene. Faktisk får du ikke bare mange av bokens kodeeksempler i Java-kode, du får også POSIX-kode og kode for Win32 API-trådhåndtering. Hvis det var leserøvelser på slutten av hvert kapittel, ville dette fungere bra som en college-tekst.

Når det er sagt, hvor bra gjør det Multitrådet programmering lære deg hvordan du bruker tråder? Det ligner nærmest Java-tråder; hovedmålet er å lære deg hva en tråd er og hvordan du bruker den. Det viser også hvordan alt under panseret fungerer i Java VM, hvordan alt er planlagt i Java VM, og så videre. I tillegg får du dekning av typiske trådemner som synkronisering, fastlåsning og løpsforhold. Lewis og Berg dekker til og med trådproblemer med RMI og optimaliseringsteknikker for å forbedre ytelsen. Alt i alt er dette en god bok - bare ikke din typiske presentasjon av Java-tråder.

Så langt som bokens eksempler går, se opp for at Elvis blir fanget av ufoer.

High Performance Java Platform Computing

Å sjekke inn med den lengste tittelen er Java-plattformsberegning med høy ytelse: Multitrådet og nettverksprogrammering, av Thomas Christopher og George Thiruvathukal. Selv forfatterenes etternavn er minst dobbelt så lang som konkurransens! Overskuddet stopper ikke der; denne boka koster også over 25 prosent mer enn de andre.

Nok om utsiden - hva er der inne? Høy ytelse hopper rett inn i en diskusjon om parallell databehandling. Du lærer om von Neumann-maskinen, Flynns taksonomi, lineær hastighet og Amdahls lov, alt i kapittel 1. Kapittel 2 utforsker trådopprettelse mer grundig enn de fleste introduksjoner til API. Etter en demonstrasjon av løpsforhold, diskuterer kapittel 3 synkronisering og hvorfor du trenger det. Kapittel 4 går dypt inn i skjermer, med mange variasjoner på problemer med leser-forfatterlås. I kapittel 5 diskuterer forfatterne bruken av delt minne - på bunken, ikke Unix-systemvarianten - alt med det formål å ha en trådgruppe. Resten av boka dekker mønstre for å utvikle applikasjoner for parallell kjøring.

Det er mye god informasjon her om parallell databehandling, men Høy ytelse'Målet er egentlig ikke å undervise i generell trådprogrammering. Det ser ut til å være utviklet hovedsakelig som en tekst for et parallelt databehandlingskurs - hvert kapittel avsluttes med en rekke gjennomtenkte øvelser, som jeg ikke fant noen svar på.

Fortsetter jeg å anbefale det samme?

De første utgavene av Samtidig programmering i Java og Java-tråder kom ut i 1997 og ble sterkt anbefalt. Anbefaler jeg bare blindt de andre utgavene sine? Kort sagt ser det ut til at Lea er Samtidig programmering er fortsatt en utmerket ressurs for de som lærer å designe programmer for den flertrådede verden. Det er ikke lett å lese, men designmønstrene og teknikkene som er forklart i boka, er gode verktøy for seriøse Java-utviklere.

På den annen side ser det ut Java-tråder har blitt etterfulgt av Sams Java trådprogrammering som den beste boka for nybegynnere. Ingenting er teknisk galt med O'Reilly-tilbudet, men Java trådprogrammering fungerer bedre som en introduksjon til Java-tråder. Hyde går til og med utover introduksjonsmaterialet, og tilbyr mer avanserte teknikker for en ekstra.

Hvis du har de første utgavene av Java-tråder og Samtidig programmering i Java, er oppdateringene verdt å få? Jeg kan anbefale å få Lea's andre utgave og videreføre Java-tråder. Hvis du har den første utgaven av Java-tråder, du har sannsynligvis gått lenger enn behovet for en ny nå. Hvis du fremdeles trenger en innledningstekst, plukk opp Sams Java trådprogrammering i stedet.

Hva skal jeg gjøre med resten? Det er virkelig en tøff samtale og avhenger av hvilken krone du bruker. Hvis jeg bare kunne få en tråd til, ville jeg velge Flertrådet programmering med Java-teknologi. Tråddekningen er unik og nyttig nok til å gjøre det til et fint tillegg til et bibliotek. Holub's Taming Java-tråder inneholder noen fine teknikker for å få mest mulig ut av trådprogrammering. Jeg er ikke sikker på om det er en nødvendig ressurs. High Performance Java Platform Computing virker passende for de som er interessert i den parallelle databehandlingen. Ellers vil jeg legge den på hyllen.

John Zukowski er en uavhengig Java-konsulent, forfatter av Definitive Guide to Swing for Java 2, andre utgave fra Apress, Mastering Java 2 fra Sybex og Java AWT Reference fra O'Reilly, samt About's Fokus på Java-guide.
$config[zx-auto] not found$config[zx-overlay] not found