Avainero – suoritettava vs. säie
Suoritettava ohjelma tunnetaan prosessina. Prosessi voidaan jakaa useisiin osaprosesseihin. Esimerkiksi Microsoft Word on prosessi. Samalla se tarkistaa kirjoitus- ja kielioppivirheiden var alta. Se on aliprosessi. Nämä aliprosessit tunnetaan säikeinä. Monisäikeistys on prosessi, jossa suoritetaan useita säikeitä samanaikaisesti. Säikeistettyjä sovelluksia voidaan rakentaa eri ohjelmointikielillä. Runnable ja Thread liittyvät Java-ohjelmointiin. Javassa on kaksi tapaa luoda säiettä toteuttamalla Runnable-liittymä tai laajentamalla säieluokkaa. Kun toteutetaan Runnable, monet säikeet voivat jakaa saman säieobjektin, kun taas Extending Thread -luokassa kuhunkin säikeeseen liittyy ainutlaatuinen objekti. Tämä on keskeinen ero Runnable- ja Thread-säikeiden välillä.
Mikä on suoritettava?
Säie kulkee joidenkin tilojen läpi. "Uusi" on langan elinkaaren alku. Kun start()-metodi kutsuu uutta säiettä, siitä tulee ajettava. Jos säikeen ajoitus valitsee säikeen, se siirtyy käynnissä olevaan tilaan. Säie odottaa tilaa, jos kyseinen säie odottaa toisen säikeen suorittavan tehtävän. Kun säie on suorittanut työn, se siirtyy lopetustilaan.
Säike voidaan toteuttaa Runnable-rajapinnalla. Katso alla olevaa ohjelmaa.
Kuva 01: Java-ohjelma säikeen luomiseksi suoritettavan käyttöliittymän avulla
Yllä olevan ohjelman mukaan Runnable Demo -luokka toteuttaa Runnable-rajapinnan. Run()-metodi on luokan sisällä, joka toteuttaa Runnable-liittymän. Se on ketjun sisääntulokohta. Logiikka on run()-metodissa. Pääohjelmassa säie luodaan määrittelemällä Runnable Demo -luokasta instantoitu objekti. Se on t1. Start()-menetelmää kutsutaan komennolla t1.
Katso alla olevaa ohjelmaa.
Kuva 02: Java-ohjelma säikeen luomiseksi silmukan suorittamiseksi toteuttamalla Runnable-käyttöliittymä
Yllä olevan esimerkin mukaan luokka Runnable Demo toteuttaa Runnable-liittymän. Säikeen avulla suoritettava logiikka on kirjoitettu run()-menetelmällä. Pääohjelmassa säie luodaan määrittelemällä Runnable Demo -luokasta instantoitu objekti. Se on t1. Sitten start()-menetelmää kutsutaan käyttämällä t1.
Mikä on ketju?
Toinen tapa luoda säiettä on laajentaa Thread-luokkaa. Se koostuu kolmesta vaiheesta. Ensimmäinen on julistaa luokka Thread-luokkaa laajentavaksi. Tämän jälkeen run()-metodi tulee kirjoittaa. Siinä on vaihesarja, joka säikeen tulee suorittaa. Lopuksi säieobjekti luodaan ja start()-metodi kutsutaan aloittamaan säikeen suoritus. Katso alla olevaa ohjelmaa.
Kuva 03: Java-ohjelma, joka laajentaa säikeen luokkaa
Yllä olevan ohjelman mukaan MyThread-luokka laajentaa Thread-luokkaa. Se ohittaa ajomenetelmän. Run()-menetelmä sisältää säikeen suorittaman logiikan. Se on ketjun sisääntulokohta. Sitten luodaan lankaobjekti. Se on lanka 1. Säie aloitetaan käyttämällä start()-menetelmää. Se suorittaa kutsun to run() -menetelmään.
Kahden luokan esimerkkiohjelma, joka laajentaa Thread-luokkaa, on seuraava.
Kuva 04: Java-ohjelma, jossa on kaksi luokkaa, jotka laajentavat säieluokkaa
Yllä olevan ohjelman mukaan sekä luokka A että B laajentavat säikeen luokkaa. Molemmilla luokilla on oma run()-menetelmän toteutus. Pääsäie on se, joka suorittaa main()-menetelmän. Ennen kuin päälanka kuolee, se luo ja käynnistää säikeen1 ja säikeen2. Kun pääsäie saavutti päämenetelmän loppuun, kolme säiettä kulkee rinnakkain. Ei ole olemassa erityistä järjestystä, jossa säikeet antavat tulosteen. Kun säiettä on aloitettu, on vaikea päättää, minkä järjestyksen ne suorittavat. Ne toimivat itsenäisesti.
Mitä yhtäläisyyksiä ajettavan ja säikeen välillä on?
Molemmat käyttävät säiettä Javassa
Mitä eroa ajettavan ja säikeen välillä on?
Ajettava vs. säie |
|
Runnable on Java-käyttöliittymä, jolla luodaan säie, jonka avulla monet säikeet voivat jakaa saman säieobjektin. | Säie on Java-luokka, joka luo säikeen, jossa jokaiseen säieteen liittyy yksilöllinen objekti. |
Muisti | |
Suoritettavassa useat säikeet jakavat saman objektin, joten ne vaativat vähemmän muistia. | Thread-luokassa jokainen säie luo ainutlaatuisen objektin, joten se vaatii enemmän muistia. |
Laajenna kykyä | |
Ajettavan käyttöliittymän käyttöönoton jälkeen se voi laajentaa luokkaa. | Useita perintöjä ei tueta Javassa. Kun säieluokkaa on laajennettu, se ei voi laajentaa mitään muuta luokkaa. |
Koodin ylläpito | |
Ajettava käyttöliittymä tekee koodista helpommin ylläpidettävän. | Thread-luokassa ylläpito vie aikaa. |
Yhteenveto – Suoritettava vs säie
Prosessi on jaettu useisiin osaprosesseihin useiden tehtävien suorittamiseksi samanaikaisesti. Nämä aliprosessit tunnetaan säikeinä. Säikeen luominen voidaan tehdä toteuttamalla Runnable-liitäntä tai laajentamalla säieluokkaa. Thread-luokkaa on helppo laajentaa, mutta se ei ole parempi olio-ohjelmoinnin käytäntö. Kun toteutetaan Runnable, monet säikeet voivat jakaa saman säieobjektin, kun taas Extending Thread -luokassa jokaiseen säikeeseen liittyy ainutlaatuinen objekti. Tämä on ero Runnablen ja Threadin välillä. Thread-luokassa useiden objektien luominen voi kuluttaa enemmän muistia.
Lataa PDF-tiedosto Runnable vs Threadista
Voit ladata tämän artikkelin PDF-version ja käyttää sitä offline-tarkoituksiin lainaushuomautuksen mukaisesti. Lataa PDF-versio tästä Ero ajettavan ja säikeen välillä