Ohjelmointi

Java-ketjut: Vertaileva kirjan arvostelu

Siitä lähtien, kun Java-säikeet O'Reillystä ja Samanaikainen ohjelmointi Java-ohjelmassa Addison-Wesleystä tuli ulos useita vuosia sitten, olen suositellut niitä ihmisille, jotka haluavat oppia käyttämään säikeitä. Useiden kilpailevien kirjojen ja nyt saatavilla olevien alkuperäisten toisten painosten myötä olen päättänyt arvioida suositukseni uudelleen. Tässä artikkelissa tarkastelen kuutta uusinta Java-ketjun ohjelmointikirjaa.

Kuusi tarkistettua kirjaa ovat:

  1. Java-säikeet, toinen painos, Scott Oaks ja Henry Wong (O'Reilly)
  2. Samanaikainen ohjelmointi Java-ohjelmassa, toinen painos, Doug Lea (Addison-Wesley)
  3. Java-säikeiden kesyttäminen, Allen Holub (Apress)
  4. Java-säieohjelmointi, Paul Hyde (Sams)
  5. Monisäikeinen ohjelmointi Java-tekniikalla, Bil Lewis ja Daniel Berg (Prentice Hall, Sun Press)
  6. Suorituskykyinen Java-alustan tietojenkäsittely: monisäikeinen ja verkotettu ohjelmointi, Thomas Christopher ja George Thiruvathukal (Prentice Hall, Sun Press)

Alla olevassa taulukossa on nopea katsaus kuuden kirjan pääominaisuuksiin.

Kaikki kirjat perustuvat Java 2 -alustan 1.2.x-julkaisuun.
Threads-kirjojen yleiskatsaus
 Java-säikeetSamanaikainen ohjelmointiJava-säikeiden kesyttäminenJava-säieohjelmointiMonisäikeinen ohjelmointiKorkean suorituskyvyn Java
Hinta2.959.954.954.999.999.99
Sivuja yhteensä320410300510460410
CD-ROM / lähde verkostaEi kylläEi kylläEi kylläEi kylläEi kylläEi kyllä
Langan perusteetErinomainenReiluEi mitäänErinomainenErinomainenReilu
TekniikatOikein hyväHyväOikein hyväErinomainenHyväOikein hyvä
SuunnittelumallejaEi mitäänErinomainenHuonoEi mitäänEi mitäänHyvä
Asteikko: Ei mitään, Huono, Keskimääräinen, Hyvä, Erittäin hyvä, Erinomainen

Taulukon tulee olla melko itsestään selittävä CD-ROM-määritteeseen asti. Haluan selittää muutaman viimeisen rivin tarkemmin:

  • Thread Basics -attribuutti osoittaa, missä määrin kirjat kuvaavat, mikä säie on ja miten sitä käytetään: kuvaamalla Lanka luokka ja Ajettava käyttöliittymä, Esine menetelmät odota(), ilmoittaa()ja Ilmoita kaikille (), ja synkronoitu avainsana.
  • Tekniikat-attribuutti arvioi kuinka hyvin kirjat tutkivat tekniikoita säikeiden käytössä.
  • Suunnittelumallit-attribuutti mittaa kirjojen selityksen siitä, kuinka luoda langanpohjainen ohjelmointi hyvin määriteltyjen suunnittelumallien mukaisesti.

Seuraavaksi tarkastelen jokaisen kirjan. Jokaisen kirjan nimen vieressä on tähtiluokitus, joka perustuu säikeiden peittoalueeseen, johon kirja väittää keskittyvän, eikä pelkästään edellä lueteltujen kolmen ominaisuuden keskiarvoon. Yksi tähti osoittaa huonoa työtä; korkein luokitus (viisi tähteä) osoittaa poikkeuksellisen kattavuuden.

Java-säikeet

Ensimmäinen painos Java-säikeet, Scott Oaks ja Henry Wong, oli alkuperäinen lopullinen lähde oppia ohjelmoimaan ketjuilla. Vaikka suurin osa esittelykirjoista kävi läpi mitä lanka oli ja miten sitä käytetään Lanka luokan kanssa Ajettava käyttöliittymä, Java-säikeet toimittanut tarvittavat lisätiedot niiden tehokkaaseen käyttöön. Toinen painos seuraa sen jalanjälkiä: se sisältää päivitettyjä tietoja ketjujen käytöstä Java 2 -alustalla, tietoja vanhentuneista sovellusliittymistä, I / O-keskeytyksistä ja Java 2 -suojausmuutoksista. Kirja kattaa myös Swing-komponenttisarjan monisäikeiset ongelmat ja tarjoaa apua alkuperäisen aikataulutuksen tuessa ja työskentelyssä moniprosessorikoneiden kanssa.

Jos olet uusi Java-ohjelmointi ja et ole vielä valloittanut ketjuja, Java-säikeet on erinomainen resurssi. Voit tutustua Java-ketjutuksen perusteisiin ja oppia tarvittavat tekniikat, jotta ohjelmat toimivat oikein monisäikeisessä maailmassa.

Samanaikainen ohjelmointi Java-ohjelmassa

Sillä aikaa Java-säikeet selittää Threads-sovellusliittymän käytön matalan tason yksityiskohdat, Samanaikainen ohjelmointi Java: ssa, Doug Lea, tutkii monisäikeisten ohjelmien asianmukaista suunnittelua. Tieto API: n käytöstä ei riitä Java-maailmassa; sinun tulisi myös käyttää aikaa ja energiaa saadaksesi ohjelmasi oikein. Tässä valossa Samanaikainen ohjelmointi on pääasiassa suunnittelumallikirja. Tietyn ongelman vuoksi voit etsiä kirjassa määriteltyä mallia, ja ohjelmasi käytännössä kirjoittaa itsensä.

Samanaikainen ohjelmointi on jaettu neljään alueeseen, jotka kuvaavat erilaisia ​​käyttötapoja. "Samanaikainen olio-ohjelmointi" -osassa aloitetaan perusteet. "Poissulkeminen" -osiossa kuvataan malleja synkronoitu avainsana. "Valtion riippuvuus" tutkii ongelmia ja malleja sen käytöstä odota(), ilmoittaa()ja Ilmoita kaikille () menetelmät Esine luokassa. Viimeinen osa "Langojen luominen" käsittelee Lanka luokassa.

Tämä kirja palvelee ehdottomasti kokeneita käyttäjiä, eikä se ole heikkohermoisille. Sinulla odotetaan olevan hyvä käsitys olio-ohjelmoinnista ja Java-ohjelmointikielestä, ja sinulta puuttuu vain ohjelmien suunnittelusta samanaikaisuuskysymyksiä varten. Kirjan lisäksi Lea tekee nykyisen käyttökirjaston vapaasti saataville kirjan verkkosivustolle. (Katso linkki Resursseista.) Kirjasto auttaa sinua suunnittelemaan ja kehittämään monisäikeisiä ohjelmia.

Java-säikeiden kesyttäminen

Allen Holub Java-säikeiden kesyttäminen, syntynyt täällä JavaWorld yhdeksänosaisena Java Toolbox -sarjana. Artikkeleita on sittemmin päivitetty ja ne muodostavat nyt kirjan sisällön, sekä uuden mielenkiintoisen luvun, joka kuvaa Java-ketjun sovellusliittymän ongelmia. (Katso resursseista linkki kyseiseen osioon, jonka otsikko on "Jos minä olisin kuningas".) Kesyttäminen on toisin kuin kaksi ensimmäistä tarkistamani kirjaa; kyse on ehdottomasti tekniikoista, jotka koskevat API: n asianmukaista käyttöä. Se ei ole johdanto ketjuihin tai suunnittelumallikirja. Koodikirjasto (katso linkin lähteet) on myös käytettävissä, jotta voit hyödyntää oppimaasi. Muista kuitenkin lukea lisenssisopimus. se ei ole julkista tai avointa lähdekoodia.

Kuvailtuaan Java: n monisäikeisen mallin perusarkkitehtuurin Holub selittää langan käyttämisen vaaroja ja tekniikoita niiden turvalliseen käyttöön. Opit luomaan ja käyttämään mutekseja, semaforeja ja ehdollisia muuttujia. Opit tuntemaan Swingien erot invokeLater () ja invokeAndWait () menetelmiä. Holub tutkii myös AWTEventMulticaster -luokassa ja näyttää, kuinka se on langankestävä ja jolla on vähän ylimääräisiä kulmia, ja kuinka voit työskennellä kierrealtaiden kanssa. Kun kaikki on sanottu ja tehty, sinulla on upea käsitys Java-ketjutusmallin rajoituksista ja käytöstä.

Olin yllättynyt nähdessäni joitain teknisiä virheitä kirjassa - esipuheessa, ei vähemmän -, mutta se ei heikentänyt kirjan tarjoamaa erinomaista tietoa. Nähtyään jatkuvasti Java-koodin alustettuna sekoitetuilla kirjaimilla, olin hieman yllättynyt siitä, että Holubin koodi muotoiltiin muuttujien sanojen ja menetelmän nimien välisellä alaviivalla. Saatat joutua lukemaan koodilohkot useita kertoja, ennen kuin ymmärrät ne kokonaan, mutta tässä annettujen tietojen laatu on haitan arvoinen. Viimeinen huomautus: kaikki lähdekoodit ovat täysin javadoc-kommentoituja.

Java-säieohjelmointi

Java-säieohjelmointi, Paul Hyde, kilpailee suoraan Java-säikeet. Se kohdistuu selkeästi aloittelevaan kehittäjään, ja sisältää lisää kattavuutta edistyneemmistä aiheista ja tekniikoista, kun kehittäjä "kasvaa". Tämä kirja on suurin joukko, ja tilaa käytetään hyvään käyttöön.

Vuoden alkupuolisko Java-säieohjelmointi kertoo, mitkä ketjut ovat ja miten työskennellä perusasioiden kanssa. Saat tyypillisen kuvauksen ketjujen luomisesta ja Ajettava käyttöliittymä. On luku siitä, miten ketjut pysäytetään, mukaan lukien niiden keskeyttäminen ja jatkaminen ilman vanhentuneita menetelmiä - hienoja tekniikoita tuottavuuden lisäämiseksi. Peiton lisäksi odota() ja ilmoittaa(), Hyde kuvaa yksityiskohtaisesti haihtuva avainsana- ja keskinäisviestintä I / O-putkien kautta. Java-säieohjelmointi on myös paras kattavuus LankaPaikallinen ja InheritableThreadLocal luokkiin, muiden kirjojen tavallisen langan ja Swingin kattavuuden lisäksi.

Osa 2 Java-säieohjelmointi kuvaa tekniikoita Java-säikeiden käsittelemiseksi. Se tarjoaa parhaan langan yhdistämisen kattavuuden ja upean luvun estetyn I / O: n purkamisesta. Et tule pettymään tässä valinnassa.

Monisäikeinen ohjelmointi Java-tekniikalla

Minusta tuntuu löytävän aina ainakin yhden kirjan, joka ei ole aivan kuten muutkin - Monisäikeinen ohjelmointi Java-tekniikalla, kirjoittanut Bil Lewis ja Daniel Berg, on juuri sellainen peto. Annoin sille vielä tähtiarvostelun, mutta tämä kirja ansaitsee erityisen maininnan. Minun mielestäni, Monisäikeinen ohjelmointiEnsisijaisena tarkoituksena ei ole opettaa sinua ohjelmoimaan Java-ketjuilla. Se auttaa sinua tällä alueella, mutta sen ensisijaisena tarkoituksena näyttää olevan opettaa sinulle, kuinka taustalla oleva säiearkkitehtuuri toimii, sekä Java Virtual Machine (Java VM): ssä että sen alla olevissa käyttöjärjestelmissä. Itse asiassa et vain saa monia kirjan koodiesimerkkejä Java-koodista, saat myös POSIX-koodin ja koodin Win32-sovellusliittymän ketjujen käsittelyä varten. Jos jokaisen luvun lopussa olisi lukijaharjoituksia, tämä toimisi hyvin yliopistotekstinä.

Se sanoi, kuinka hyvin Monisäikeinen ohjelmointi opettaa sinulle kuinka ketjuja käytetään? Se muistuttaa eniten Java-säikeet; sen päätavoitteena on opettaa sinulle mikä lanka on ja miten sitä käytetään. Se osoittaa myös, miten kaikki konepellin alla toimivat Java VM: ssä, miten kaikki on ajoitettu Java VM: ssä, ja niin edelleen. Lisäksi saat kattavuuden tyypillisistä ketjutusaiheista, kuten synkronoinnista, umpikujasta ja kilpailuolosuhteista. Lewis ja Berg käsittelevät jopa langankysymyksiä RMI: llä ja optimointitekniikoilla suorituskyvyn parantamiseksi. Kaiken kaikkiaan tämä on hyvä kirja - vain ei tyypillinen Java-ketjujen esittely.

Sikäli kuin kirjan esimerkit menevät, varo Elvisin joutumista UFOihin.

Suorituskykyinen Java-alustan tietojenkäsittely

Sisäänkirjautuminen pisimmällä otsikolla on Suorituskykyinen Java-alustan tietojenkäsittely: monisäikeinen ja verkotettu ohjelmointi, kirjoittaneet Thomas Christopher ja George Thiruvathukal. Jopa kirjoittajien sukunimet ovat vähintään kaksinkertaiset kilpailijoidensa pituuksiin! Ylimäärä ei pysähdy siihen; tämä kirja maksaa myös yli 25 prosenttia enemmän kuin muut.

Tarpeeksi ulkopuolelta - mitä sisällä on? Korkea suorituskyky hyppää suoraan keskusteluun rinnakkaislaskennasta. Opit von Neumannin koneesta, Flynnin taksonomiasta, lineaarisesta nopeudesta ja Amdahlin laista, kaikki luvusta 1. Luvussa 2 tutkitaan ketjun luomista syvällisemmin kuin useimpia API: n esittelyjä. Kilpailuolosuhteiden esittelyn jälkeen luvussa 3 käsitellään synkronointia ja miksi sitä tarvitaan. Luvussa 4 tarkastellaan syvällisesti näyttöjä, joissa on monia muunnelmia lukijoiden ja kirjoittajien lukitusongelmista. Luvussa 5 kirjoittajat keskustelevat jaetun muistin käytöstä - kasalla, ei Unix-järjestelmälajikkeella - kaikesta säikeiden muodostamiseksi. Kirjan loppuosa käsittelee malleja rinnakkaisen suorituksen sovellusten kehittämiseksi.

Täällä on paljon hyvää tietoa rinnakkaislaskennasta, mutta Korkea suorituskyky'Tavoitteena ei todellakaan ole opettaa yleiskäyttöistä säieohjelmointia. Se näyttää olevan kehitetty pääasiassa rinnakkaislaskentakurssin tekstinä - jokainen luku päättyy sarjaan harkittuja harjoituksia, joihin en löytänyt vastauksia.

Suosittelenko jatkuvasti samaa?

Ensimmäiset painokset Samanaikainen ohjelmointi Java-ohjelmassa ja Java-säikeet ilmestyi vuonna 1997 ja oli erittäin suositeltavaa. Suosittelenko vain sokeasti heidän toisia painoksiaan? Lyhyesti sanottuna näyttää siltä, ​​että Lea on Samanaikainen ohjelmointi on edelleen erinomainen resurssi niille, jotka oppivat suunnittelemaan ohjelmia monisäikeiseen maailmaan. Se ei ole helppo lukea, mutta kirjassa esitetyt suunnittelumallit ja tekniikat ovat erinomaisia ​​työkaluja vakaville Java-kehittäjille.

Toisaalta se näyttää Java-säikeet on seurannut Sams Java-säieohjelmointi paras kirja aloittelijoille. Mikään ei ole teknisesti vialla O'Reilly-tarjouksessa, mutta Java-säieohjelmointi toimii paremmin johdantona Java-ketjuihin. Hyde ylittää jopa esittelymateriaalin, tarjoten edistyneempiä tekniikoita ylimääräiseksi.

Jos sinulla on ensimmäiset versiot Java-säikeet ja Samanaikainen ohjelmointi Java: ssa, ovatko päivitykset saamisen arvoisia? Voisin suositella Lean toisen painoksen hankkimista ja siirtämistä eteenpäin Java-säikeet. Jos sinulla on ensimmäinen painos Java-säikeet, olet todennäköisesti ylittänyt toisen tarvinnan nyt. Jos tarvitset vielä johdantotekstiä, poimi Sams Java-säieohjelmointi sen sijaan.

Mitä tehdä muille? Se on todella kova puhelu ja riippuu siitä, kenen penniä käytät. Jos voisin saada vain yhden säikekirjan lisää, valitsisin Monisäikeinen ohjelmointi Java-tekniikalla. Sen säikeiden peitto on ainutlaatuinen ja tarpeeksi hyödyllinen, jotta se olisi mukava lisä kirjastoon. Holubin Java-säikeiden kesyttäminen sisältää hienoja tekniikoita saamaan kaiken irti säieohjelmoinnista. En ole kuitenkaan varma, onko se välttämätön resurssi. Suorituskykyinen Java-alustan tietojenkäsittely näyttää sopivalta kiinnostuneille rinnakkaisesta laskennasta. Muuten jätän sen hyllylle.

John Zukowski on riippumaton Java-konsultti, joka on kirjoittanut Definitive Guide to Swing for Java 2: n, Apressin toisen painoksen, Java 2: n masteroinnin Sybexiltä ja Java AWT -viitteen O'Reillystä sekä Aboutin keskittymisen Java-oppaaseen.
$config[zx-auto] not found$config[zx-overlay] not found