Többszálú bemenet Jáva több szál egyidejű végrehajtásának folyamata.
A szál egy könnyű részfolyamat, a feldolgozás legkisebb egysége. A multiprocessing és a multithreading mindkettőt a többfeladatos munkavégzéshez használják.
nyisson meg egy fájlt java-val
Azonban többszálas feldolgozást használunk, mint több feldolgozást, mivel a szálak megosztott memóriaterületet használnak. Nem foglalnak le külön memóriaterületet, így memóriát takarítanak meg, és a szálak közötti kontextusváltás kevesebb időt vesz igénybe, mint a folyamat.
A Java Multithreading leginkább játékokban, animációkban stb.
A Java Multithreading előnyei
1) Azt nem blokkolja a felhasználót mert a szálak függetlenek, és egyszerre több műveletet is végrehajthat.
2) Te sok műveletet együtt tud végrehajtani, így időt takarít meg .
3) A szálak vannak független , tehát nincs hatással a többi szálra, ha egyetlen szálban kivétel történik.
Többfeladatos
A multitasking több feladat egyidejű végrehajtásának folyamata. Multitaskingot használunk a CPU használatához. A multitasking kétféleképpen valósítható meg:
- Folyamat alapú többfeladatos munkavégzés (multiprocessing)
- Szál alapú többfeladatos (többszálú)
1) Folyamat alapú többfeladatos (multiprocessing)
- Minden folyamatnak van egy címe a memóriában. Más szavakkal, minden folyamat külön memóriaterületet foglal le.
- Egy folyamat nehézkes.
- A folyamatok közötti kommunikáció költsége magas.
- Az egyik folyamatról a másikra való váltás némi időt igényel a mentéshez és a betöltéshez regisztereket , memóriatérképek, listák frissítése stb.
2) Szál alapú többfeladatos (többszálas)
- A szálak ugyanazt a címteret használják.
- A szál könnyű.
- A szálak közötti kommunikáció költsége alacsony.
Megjegyzés: Minden szálhoz legalább egy folyamat szükséges.
Mi a Thread a java-ban
A szál egy könnyű részfolyamat, a feldolgozás legkisebb egysége. Ez egy külön végrehajtási út.
A szálak függetlenek. Ha az egyik szálban kivétel történik, az nincs hatással a többi szálra. Megosztott memóriaterületet használ.
Amint a fenti ábrán látható, a folyamaton belül egy szál kerül végrehajtásra. A szálak között kontextusváltás van. Az operációs rendszeren belül több folyamat is lehet, és egy folyamatnak több szála is lehet.
Megjegyzés: Egyszerre csak egy szál kerül végrehajtásra.
Java szál osztály
Java biztosítja Szál osztály szálprogramozás eléréséhez. A szál osztály biztosítja kivitelezők és módszerek a szálon műveletek létrehozására és végrehajtására. A szálosztály meghosszabbodik Objektum osztály és futtatható felületet valósít meg.
Java szál módszerek
S.N. | Módosító és típus | Módszer | Leírás |
---|---|---|---|
1) | üres | Rajt() | A szál végrehajtásának elindítására szolgál. |
2) | üres | fuss() | Egy szál műveletének végrehajtására szolgál. |
3) | statikus űr | alvás() | A megadott ideig alszik egy szálat. |
4) | statikus szál | currentThread() | Hivatkozást ad vissza az éppen futó szál objektumra. |
5) | üres | csatlakozik() | Arra vár, hogy egy szál elhaljon. |
6) | int | getPriority() | Visszaadja a szál prioritását. |
7) | üres | setPriority() | Megváltoztatja a szál prioritását. |
8) | Húr | getName() | Visszaadja a szál nevét. |
9) | üres | setName() | Megváltoztatja a szál nevét. |
10) | hosszú | getId() | Visszaadja a szál azonosítóját. |
tizenegy) | logikai érték | életben van() | Azt teszteli, hogy a szál él-e. |
12) | statikus űr | hozam() | Ez azt eredményezi, hogy az éppen futó szálobjektum szünetel, és lehetővé teszi más szálak ideiglenes végrehajtását. |
13) | üres | felfüggeszt() | A szál felfüggesztésére szolgál. |
14) | üres | önéletrajz() | A felfüggesztett szál folytatására szolgál. |
tizenöt) | üres | állj meg() | A szál leállítására szolgál. |
16) | üres | elpusztítani() | A szálcsoport és annak összes alcsoportjának megsemmisítésére szolgál. |
17) | logikai érték | isDaemon() | Azt teszteli, hogy a szál démonszál-e. |
18) | üres | setDaemon() | A szálat démonként vagy felhasználói szálként jelöli meg. |
19) | üres | interrupt() | Megszakítja a fonalat. |
húsz) | logikai érték | megszakad() | Megvizsgálja, hogy a szál megszakadt-e. |
huszonegy) | statikus logikai érték | megszakított() | Megvizsgálja, hogy az aktuális szál megszakadt-e. |
22) | statikus int | activeCount() | Visszaadja az aktív szálak számát az aktuális szál szálcsoportjában. |
23) | üres | checkAccess() | Meghatározza, hogy az éppen futó szálnak van-e engedélye a szál módosítására. |
24) | statikus logikai érték | holdLock() | Akkor és csak akkor ad vissza igazat, ha az aktuális szál tartja a monitorzárat a megadott objektumon. |
25) | statikus űr | dumpStack() | Az aktuális szál veremnyomának kinyomtatására szolgál a szabványos hibafolyamhoz. |
26) | StackTraceElement[] | getStackTrace() | A szál veremkiíratását reprezentáló verem nyomelemek tömbjét adja vissza. |
27) | statikus int | felsorol() | Ez arra szolgál, hogy minden aktív szál szálcsoportját és alcsoportját a megadott tömbbe másolja. |
28) | Menet.Állam | getState() | A szál állapotának visszaadására szolgál. |
29) | ThreadGroup | getThreadGroup() | A szálcsoport visszaadására szolgál, amelyhez ez a szál tartozik |
30) | Húr | toString() | A szál karakterlánc reprezentációjának visszaadására szolgál, beleértve a szál nevét, prioritását és szálcsoportját. |
31) | üres | értesít() | Csak egy szál értesítésére szolgál, amely egy adott objektumra vár. |
32) | üres | értesíti mindet() | Arra használják, hogy értesítést küldjenek egy adott objektum összes várakozó szálának. |
33) | üres | setContextClassLoader() | Beállítja a kontextus ClassLoader-t a szálhoz. |
3. 4) | ClassLoader | getContextClassLoader() | Visszaadja a kontextus ClassLoader-t a szálhoz. |
35) | statikus szál.UncaughtExceptionHandler | getDefaultUncaughtExceptionHandler() | Visszaadja az alapértelmezett kezelőt, amelyet akkor hív meg, ha egy szál egy nem elkapott kivétel miatt hirtelen leáll. |
36) | statikus űr | setDefaultUncaughtExceptionHandler() | Beállítja az alapértelmezett kezelőt, amelyet akkor hív meg, ha egy szál hirtelen leáll egy nem elkapott kivétel miatt. |
- Hogyan lehet két feladatot két szálon keresztül végrehajtani?
- Hogyan hajtsunk végre többszálas műveletet anonim osztályon keresztül?
- Mi az a szálütemező, és mi a különbség a megelőző ütemezés és az időszeletelés között?
- Mi történik, ha kétszer indítunk egy szálat?
- Mi történik, ha a start() metódus helyett a run() metódust hívjuk meg?
- Mi a csatlakozási módszer célja?
- Miért fejezi be a JVM a démonszálat, ha nem maradt felhasználói szál?
- Mi az a leállító horog?
- Mi az a szemétszállítás?
- Mi a célja a finalize() metódusnak?
- Mit jelent a gc() metódus?
- Mi a szinkronizálás, és miért használjuk a szinkronizálást?
- Mi a különbség a szinkronizált metódus és a szinkronizált blokk között?
- Mi a két módja a statikus szinkronizálásnak?
- Mi az a patthelyzet, és mikor fordulhat elő?
- Mi az a szálak közötti kommunikáció vagy együttműködés?
- Többszálú
- Egy szál életciklusa
- Szál létrehozásának két módja
- Több feladat végrehajtása több szálon keresztül
- Szál ütemező
- Egy szálat alszik
- Elindíthatunk egy szálat kétszer?
- Mi történik, ha a start() metódus helyett a run() metódust hívjuk meg?
- Csatlakozás egy szálhoz
- Egy szál elnevezése
- Egy szál prioritása
- Daemon Thread
- ShutdownHook
- Szemétgyüjtés
- Szinkronizálás szinkronizált módszerrel
- Szinkronizált blokk
- Statikus szinkronizálás
- Holtpont
- Szálak közötti kommunikáció