Java Academy · Oppitunti

Rakenteisen rinnakkaisuuden malli

Käsittele toisiinsa liittyviä tehtäviä kokonaisuutena.

Oppitunti 1/413 vaihetta

Rakenteisen rinnakkaisuuden malli on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Java Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Java Academy-kurssilla on yhteensä 4 oppituntia.

Mitä rakenteinen samanaikaisuus tarkoittaa

Rakenteinen samanaikaisuus (JEP 453, esikatselu) käsittelee toisiinsa liittyvien samanaikaisten tehtävien ryhmää yhtenä työyksikkönä.

Jos isäntäkäsky jakautuu alitehtäviksi, kaikkien alitehtävien on valmistuttava ennen kuin isäntäkäsky jatkaa, aivan kuten tavallisen koodin lohkon alueella.

Ongelma, jonka se ratkaisee

Paljailla executoreilla käynnistetty tehtävä voi elää luojansa jälkeen, vuotaa resursseja tai unohtua. Yhden haaran virhe voi jäädä huomaamatta, kun muut jatkavat suoritustaan.

Tämä johtaa säievuotoihin, orpoihin tehtäviin ja vaikeasti hahmotettavaan virheenkäsittelyyn.

Tehtävät puuna

Rakenteinen samanaikaisuus pakottaa isäntä- ja lapsisuhteen. Alitehtävät muodostavat puun, jonka juurena on ne käynnistänyt tehtävä.

  • Alitehtävä ei voi elää isäntäalueensa yli
  • Isäntä odottaa kaikkien lasten valmistumista
  • Peruutus etenee puussa alaspäin

Peräkkäisen koodin jäljittely

Keskeinen ajatus on, että samanaikaisen koodin pitäisi näyttää peräkkäiseltä koodilta. Alue avataan, työ haarautetaan ja alue suljetaan vasta, kun kaikki haarat ovat liittyneet takaisin.

Näin elinkaaret ovat ilmeisiä ja virheitä on helppo arvioida.

Vanha rakenteeton tapa

Tässä on tuttu mutta rakenteeton lähestymistapa, jossa käytetään tavallista executoria. Se toimii, mutta mikään ei takaa, että kahdella Futurella on koordinoitu elinkaari.

import java.util.concurrent.*;

public class Main {
    public static void main(String[] args) throws Exception {
        try (ExecutorService exec = Executors.newVirtualThreadPerTaskExecutor()) {
            Future<String> user = exec.submit(() -> "Ada");
            Future<Integer> order = exec.submit(() -> 7);
            System.out.println(user.get() + " has " + order.get() + " orders");
        }
    }
}

Miksi koordinointi on tärkeää

Edellisessä esimerkissä tilaustehtävä jatkaa hyödytöntä suoritustaan, jos käyttäjän haku epäonnistuu. Teidän on peruutettava se manuaalisesti ja käsiteltävä kunkin get()-kutsun poikkeukset.

Rakenteinen samanaikaisuus automatisoi tämän koordinoinnin.

Esikatselutila

Rakenteinen samanaikaisuus toimitetaan esikatselu-API:na java.util.concurrent-paketissa. Sen käyttämistä varten ohjelma on käännettävä ja ajettava valitsimella --enable-preview.

Keskeinen luokka on StructuredTaskScope, jota käsitellään seuraavalla oppitunnilla.

Elinkaaritakuut

Rakenteisen scopin sisällä:

  • Kaikki alitehtävät suoritetaan loppuun, epäonnistuvat tai peruutetaan ennen kuin scopesta poistutaan
  • Mikään alitehtävä ei päädy taustalle
  • Kutsupino vastaa todellista tehtävähierarkiaa thread dump -tulosteissa

Havainnoitavuuden hyöty

Koska alitehtäväpuu on eksplisiittinen, JDK:n työkalut voivat näyttää sen. Thread dump ryhmittelee alitehtävät niiden emoscopin alle, mikä helpottaa diagnosointia huomattavasti enemmän kuin hajallaan olevat poolisäikeet.

Sopii hyvin virtuaalisäikeiden kanssa

Jokainen scopin alitehtävä suoritetaan oletusarvoisesti omassa virtuaalisäikeessään. Virtuaalisäikeiden edullisuus tekee suuren alitehtävämäärän hajauttamisesta käytännöllistä.

Nämä kaksi ominaisuutta suunniteltiin toimimaan saumattomasti yhdessä.

Ajattelumalli

Ajattele rakenteista scopea samanaikaisuuden try-with-resources-lohkona: avaat sen, forkkaat työn, kutsut joinia ja suljet sen. Sulkeva aaltosulje takaa, ettei mitään jää suorittamatta.

Pikatarkistus

Testaa, miten hyvin hallitset keskeisen periaatteen.

Kertaus

Tutustuit rakenteisen rinnakkaisuuden malliin:

  • Toisiinsa liittyvät tehtävät muodostavat scopin elinkaareen sidotun puun
  • Samanaikainen koodi näyttää peräkkäiseltä koodilta
  • Kyseessä on esikatselurajapinta, joka edellyttää asetusta --enable-preview
  • Se sopii luontevasti yhteen virtuaalisäikeiden kanssa

Seuraavaksi: StructuredTaskScope-rajapinta.

Aloita maksutta

Opi Java tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
104
Oppitunnit
374

Usein kysytyt kysymykset

Onko oppitunti ”Rakenteisen rinnakkaisuuden malli” ilmainen?

Kyllä – oppitunnin ”Rakenteisen rinnakkaisuuden malli” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Java Academy-kurssin, päivitä CoddyKit PROhon. Java Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Rakenteisen rinnakkaisuuden malli”?

Käsittele toisiinsa liittyviä tehtäviä kokonaisuutena. Harjoittelet Java Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Java Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Java Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Rakenteisen rinnakkaisuuden malli”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Java Academy-oppitunnilla?

Kyllä. Jokainen Java Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Rakenteisen rinnakkaisuuden malli
  2. StructuredTaskScope
  3. Sulkeminen virheen ja onnistumisen yhteydessä
  4. Virheenkäsittely ja peruutus
← Takaisin: Java Academy