logo

Monisäikeistys Javassa

  1. Monisäikeinen
  2. Moniajo
  3. Prosessipohjainen moniajo
  4. Säiepohjainen moniajo
  5. Mikä on Thread

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.

Java monisäikeistys

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.
Tiedätkö
  • 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ö?
Mitä opimme Multithreadingissä
  • 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ä