Monisäikeinen sisään Java on prosessi, jossa suoritetaan useita säikeitä samanaikaisesti.
Lanka on kevyt osaprosessi, pienin käsittelyyksikkö. Moniprosessointia ja monisäikeistystä, molempia käytetään moniajon saavuttamiseen.
ero binääripuun ja binäärihakupuun välillä
Käytämme kuitenkin monisäikeistystä kuin moniprosessointia, koska säikeet käyttävät jaettua muistialuetta. Ne eivät varaa erillistä muistialuetta, joten muistia säästyy ja kontekstin vaihtaminen säikeiden välillä vie vähemmän aikaa kuin prosessi.
Java Multithreading käytetään enimmäkseen peleissä, animaatioissa jne.
Java Multithreadingin edut
1) Se ei estä käyttäjää koska säikeet ovat riippumattomia ja voit suorittaa useita toimintoja samanaikaisesti.
2) Sinä voi suorittaa monia toimintoja yhdessä, joten se säästää aikaa .
3) Langat ovat riippumaton , joten se ei vaikuta muihin säikeisiin, jos poikkeus tapahtuu yhdessä säikeessä.
Moniajo
Multitasking on prosessi, jossa suoritetaan useita tehtäviä samanaikaisesti. Käytämme moniajoa prosessorin hyödyntämiseen. Moniajo voidaan saavuttaa kahdella tavalla:
- Prosessipohjainen moniajo (monikäsittely)
- Säiepohjainen moniajo (monisäikeinen)
1) Prosessipohjainen moniajo (monikäsittely)
- Jokaisella prosessilla on osoite muistissa. Toisin sanoen jokainen prosessi varaa erillisen muistialueen.
- Prosessi on raskas.
- Prosessin välisen viestinnän kustannukset ovat korkeat.
- Siirtyminen prosessista toiseen vaatii jonkin aikaa tallentamiseen ja lataamiseen rekisterit , muistikartat, päivityslistat jne.
2) Säiepohjainen moniajo (monisäikeinen)
- Säikeet jakavat saman osoitetilan.
- Lanka on kevyt.
- Viestinnän kustannukset lankojen välillä ovat alhaiset.
Huomautus: Jokaiselle säikeelle vaaditaan vähintään yksi prosessi.
Mikä on Thread javassa
Lanka on kevyt osaprosessi, pienin käsittelyyksikkö. Se on erillinen toteutuspolku.
Langat ovat riippumattomia. Jos yhdessä säikeessä tapahtuu poikkeus, se ei vaikuta muihin säikeisiin. Se käyttää jaettua muistialuetta.
Kuten yllä olevassa kuvassa näkyy, säie suoritetaan prosessin sisällä. Säikeiden välillä tapahtuu kontekstin vaihtoa. Käyttöjärjestelmän sisällä voi olla useita prosesseja, ja yhdellä prosessilla voi olla useita säikeitä.
Huomautus: Vain yksi säie suoritetaan kerrallaan.
Java-säieluokka
Java tarjoaa Lanka luokka lankojen ohjelmoinnin saavuttamiseksi. Lankaluokka tarjoaa rakentajat ja menetelmät toimintojen luomiseksi ja suorittamiseksi säikeellä. Lankaluokka laajenee Objektiluokka ja toteuttaa Runnable-liittymän.
Java-säiemenetelmät
S.N. | Muokkaus ja tyyppi | Menetelmä | Kuvaus |
---|---|---|---|
1) | mitätön | alkaa() | Sitä käytetään langan suorittamisen aloittamiseen. |
2) | mitätön | juosta() | Sitä käytetään toiminnon tekemiseen säikeelle. |
3) | staattinen tyhjyys | nukkua() | Se nukkuu lankaa määritetyn ajan. |
4) | staattinen lanka | nykyinen säie() | Se palauttaa viittauksen parhaillaan suoritettavaan säieobjektiin. |
5) | mitätön | liittyä seuraan() | Se odottaa langan kuolemista. |
6) | int | getPriority() | Se palauttaa ketjun prioriteetin. |
7) | mitätön | setPriority() | Se muuttaa ketjun prioriteettia. |
8) | merkkijono | getName() | Se palauttaa ketjun nimen. |
9) | mitätön | setName() | Se muuttaa ketjun nimen. |
10) | pitkä | getId() | Se palauttaa ketjun tunnuksen. |
yksitoista) | boolean | on elossa() | Se testaa, onko lanka elossa. |
12) | staattinen tyhjyys | tuotto() | Se aiheuttaa parhaillaan suoritettavan säieobjektin keskeytyksen ja sallii muiden säikeiden suorittaa väliaikaisesti. |
13) | mitätön | keskeyttää() | Sitä käytetään langan ripustamiseen. |
14) | mitätön | jatkaa() | Sitä käytetään keskeytetyn langan jatkamiseen. |
viisitoista) | mitätön | lopettaa() | Sitä käytetään langan pysäyttämiseen. |
16) | mitätön | tuhota() | Sitä käytetään säieryhmän ja sen kaikkien alaryhmien tuhoamiseen. |
17) | boolean | isDaemon() | Se testaa, onko säie demon-säie. |
18) | mitätön | setDaemon() | Se merkitsee säiettä demoniksi tai käyttäjäsäikeeksi. |
19) | mitätön | keskeyttää() | Se katkaisee langan. |
kaksikymmentä) | boolean | on keskeytetty () | Se testaa, onko lanka katkennut. |
kaksikymmentäyksi) | staattinen boolean | keskeytetty () | Se testaa, onko nykyinen säie katkennut. |
22) | staattinen int | ActiveCount() | Se palauttaa aktiivisten säikeiden määrän nykyisen säikeen säieryhmässä. |
23) | mitätön | checkAccess() | Se määrittää, onko parhaillaan käynnissä olevalla säikeellä lupa muokata säiettä. |
24) | staattinen boolean | holdLock() | Se palauttaa tosi, jos ja vain, jos nykyinen säie pitää monitorilukon määritetyssä objektissa. |
25) | staattinen tyhjyys | dumpStack() | Sitä käytetään nykyisen säikeen pinojäljen tulostamiseen normaaliin virhevirtaan. |
26) | StackTraceElement[] | getStackTrace() | Se palauttaa joukon pinojäljityselementtejä, jotka edustavat säikeen pinovedosta. |
27) | staattinen int | luetella() | Sitä käytetään kopioimaan jokaisen aktiivisen säikeen säieryhmä ja sen aliryhmä määritettyyn taulukkoon. |
28) | Thread.State | getState() | Sitä käytetään langan tilan palauttamiseen. |
29) | ThreadGroup | getThreadGroup() | Sitä käytetään palauttamaan säieryhmä, johon tämä säie kuuluu |
30) | merkkijono | toString() | Sitä käytetään palauttamaan tämän säikeen merkkijonoesitys, mukaan lukien säikeen nimi, prioriteetti ja säieryhmä. |
31) | mitätön | ilmoittaa() | Sitä käytetään antamaan ilmoitus vain yhdelle säikeelle, joka odottaa tiettyä objektia. |
32) | mitätön | ilmoita kaikille() | Sitä käytetään antamaan ilmoitus tietyn objektin kaikille odottaville säikeille. |
33) | mitätön | setContextClassLoader() | Se määrittää säikeen kontekstin ClassLoaderin. |
3. 4) | ClassLoader | getContextClassLoader() | Se palauttaa säikeen kontekstin ClassLoaderin. |
35) | staattinen säie.UncaughtExceptionHandler | getDefaultUncaughtExceptionHandler() | Se palauttaa oletuskäsittelijän, joka kutsutaan, kun säie päättyy äkillisesti havaitsemattoman poikkeuksen vuoksi. |
36) | staattinen tyhjyys | setDefaultUncaughtExceptionHandler() | Se asettaa oletuskäsittelijän, joka kutsutaan, kun säie päättyy äkillisesti havaitsemattoman poikkeuksen vuoksi. |
- Kuinka suorittaa kaksi tehtävää kahdella säikeellä?
- Kuinka suorittaa monisäikeinen anonyymi luokka?
- Mikä on säikeen ajoitus ja mitä eroa on ennakoivan ajoituksen ja aikaleikkauksen välillä?
- Mitä tapahtuu, jos aloitamme ketjun kahdesti?
- Mitä tapahtuu, jos kutsumme run()-menetelmää start()-menetelmän sijaan?
- Mikä on liitosmenetelmän tarkoitus?
- Miksi JVM lopettaa demonsäikeen, jos yhtään käyttäjäsäiettä ei ole jäljellä?
- Mikä on sammutuskoukku?
- Mitä on roskien keräys?
- Mikä on finalize()-menetelmän tarkoitus?
- Mitä gc()-metodi tekee?
- Mitä synkronointi on ja miksi synkronointia käytetään?
- Mitä eroa on synkronoidulla menetelmällä ja synkronoidulla lohkolla?
- Mitkä ovat kaksi tapaa suorittaa staattinen synkronointi?
- Mikä on umpikuja ja milloin se voi tapahtua?
- Mitä on säikeiden välinen viestintä tai yhteistyö?
- Monisäikeinen
- Langan elinkaari
- Kaksi tapaa luoda säiettä
- Kuinka suorittaa useita tehtäviä useiden säikeiden avulla
- Säikeen ajoitus
- Nukkumassa lanka
- Voimmeko aloittaa ketjun kahdesti?
- Mitä tapahtuu, jos kutsumme run()-menetelmää start()-menetelmän sijaan?
- Kierteeseen liittyminen
- Langan nimeäminen
- Langan prioriteetti
- Daemon Thread
- ShutdownHook
- Roskakokoelma
- Synkronointi synkronoidun menetelmän kanssa
- Synkronoitu lohko
- Staattinen synkronointi
- Umpikuja
- Säikeiden välinen viestintä