Különbség a szálak osztálya és a Java futtatható felülete között

Szerző: Laura McKinney
A Teremtés Dátuma: 1 Április 2021
Frissítés Dátuma: 1 Lehet 2024
Anonim
Különbség a szálak osztálya és a Java futtatható felülete között - Technológia
Különbség a szálak osztálya és a Java futtatható felülete között - Technológia

Tartalom


A szálat kétféleképpen lehet meghatározni. Először: egy szál osztály kibővítése amely már telepített egy futtatható felületet. Másodszor, közvetlenül futtatható felület megvalósítása. Amikor egy szálat definiál a szál osztály meghosszabbításával, akkor felül kell írnia a run () metódust a szál osztályban. A futtatható felületet megvalósító szál meghatározásakor a Runnable felület egyetlen run () módszerét kell megvalósítania. A szál és a futtatható közötti alapvető különbség az, hogy a szál osztály meghosszabbításával meghatározott egyes szálak egyedi objektumot hoznak létre, és társulnak az adott objektumhoz. Másrészt, a Runnable felület megvalósításával meghatározott szálak ugyanazt az objektumot osztják.


Az alább bemutatott összehasonlító táblázat segítségével figyeljünk meg néhány más különbséget a szál és a futtatható között:

  1. Összehasonlító táblázat
  2. Meghatározás
  3. Főbb különbségek
  4. Következtetés

Összehasonlító táblázat

Az összehasonlítás alapjacérnafuttatható
AlapvetőMinden szál létrehoz egy egyedi objektumot, és hozzákapcsolódik hozzá.Több szál azonos objektumokkal rendelkezik.
memória Mivel az egyes szálak egyedi objektumot hoznak létre, további memóriára van szükség.Mivel több szál ugyanazt az objektumot osztja, kevesebb memória kerül felhasználásra.
KiterjedőA Java-ban a többszörös öröklés nem megengedett, tehát az osztály kiterjesztése után a szál osztály nem bővítheti más osztályt.Ha egy osztály meghatározza a futtatható felületet megvalósító szálat, akkor esélye van egy osztály kibővítésére.
Használat A felhasználónak csak akkor kell kibővítenie a szálak osztályát, ha felül kívánja lépni a szálak osztály többi módszerét.Ha csak a futtatási módszert szeretné specializálni, akkor a Runnable megvalósítása jobb megoldás.
Kapcsolás A kiterjesztő szálosztály szűk csatolást vezet be, mivel az osztály tartalmazza a szál osztály kódját és a szálhoz hozzárendelt feladatotA Runnable felület megvalósítása laza csatolást vezet be, mivel a szál kódja külön van a szálak feladatától.


A szál osztály meghatározása

cérna egy osztály a java.lang csomag. A szál osztály kiterjed egy Tárgy osztály, és végrehajtja futtatható interfészek. A szál osztály konstruktorokkal és módszerekkel rendelkezik a szál létrehozásához és működtetéséhez. Ha több szálat hozunk létre, akkor minden szál létrehoz egy egyedi objektumot, és társul az objektumhoz. Ha szálat kibővítő szál-osztályt hoz létre, akkor nem bővíthet más osztályt, mivel a java nem támogatja a többszörös öröklést. Tehát úgy dönt, hogy a Téma osztály kibővítését csak akkor választja, ha a Téma osztály más módszereit is felül kívánja felülírni. Lássunk egy példát egy szál-osztály létrehozására szolgáló szál létrehozására.

/ * Szálat meghatározása * / Osztály Mythread kiterjeszti a szálat {/ * a szálat feladata * / public void run () {for (int i = 0; i <10; i ++) {System.Out.ln ("Gyerek szál") ); }} Class mainThread {/ * a fő szál feladata * / nyilvános statikus void main (karakterláncok) {Mythread mt = new Mythread (); / * a fő szál létrehozta a gyermekszálat * / mt.start (); for (int i = 0; i <10; i ++) {System.Out. ("Fő szál"); }}} / * Kimenet * / Fő szál Fő szál Fő szál Fő szál Fő szál Gyermek szál Gyerek szál Gyerek szál Gyerek szál Fő szál Gyerek szál Fő szál Fő szál Gyerek szál Gyermek szál Fő szál Fő szál Fő szál Gyermek szál Gyerek szál fő szál Fő szál

A fenti kódban létrehozok egy Mythread osztályt, amely kiterjeszti a szál osztályát, és felülbírálja a szál osztály futtatási módszerét. A fő módszert tartalmazó osztályban létrehozom a Mythread osztály szálobjektumát (mt), és a szálobjektummal meghívom a start () metódust. Az indítási módszer elindítja a szál végrehajtását, és ezzel egyidejűleg a JVM meghívja a szál futtatási módszerét. Most két szálat talál a programban, egy főszálat és egy második szálat, amelyet a főszálat hozott létre. Mindkét szál végrehajtása egyszerre zajlik, de a pontos kimenetet nem lehet úgy tenni.

A futtatható interfész meghatározása

futtatható egy felület a java.lang csomag. A Runnable felület megvalósításával meghatározhatunk egy szálat. A futtatható felület egyetlen módszerrel rendelkezik fuss(), amelyet a Runnable felületet megvalósító osztály hajt végre. Ha úgy dönt, hogy meghatározza a futtatható felületet megvalósító szálat, akkor továbbra is lehetősége van kiterjeszteni bármely más osztályt. Ha több szálat hoz létre a Futtatható felület megvalósításával, akkor minden szál ugyanazt a futtatható példányt osztja meg. tanuljunk meg egy szál meghatározását a futtatható felületen keresztül.

/ * Szálat meghatározása * / Osztályfutószál-végrehajtó eszközök Futtatható {/ * szálat feladata * / public void run () {for (int i = 0; i <10; i ++) {for System.Out.ln ("Gyerekszál") ); }} Class mainThread {/ * a fő szál feladata * / nyilvános statikus void main (karakterláncok) {Mythread rt = new Mythread (); / * a fő szál létrehozta a futtatható objektumot * / szál t = új szál (rt); / * a fő szál létrehozza a gyermek szálot, és átadta a futtatható objektumot * / t.start (); for (int i = 0; i <10; i ++) {System.Out. ("Fő szál"); }}} / * Kimenet * / Fő szál Fő szál Fő szál Fő szál Fő szál Gyermek szál Gyerek szál Gyerek szál Gyerek szál Fő szál Gyerek szál Fő szál Fő szál Gyerek szál Gyermek szál Fő szál Fő szál Fő szál Gyermek szál Gyerek szál fő szál Fő szál

A fenti kódban létrehoztam egy Runnablethread osztályt, amely megvalósítja a Runnable felületet, és meghatározza a szál feladatát a Runnable interfész run () módszerének megvalósításával. Ezután elkészítek egy osztályos maintrasztot, amely tartalmazza a fő módszert. A fő módszeren kívül deklaráltam egy Runnablethread osztály futtatható objektumát, és továbbítottam ezt az objektumot a szál konstruktorának, miközben egy szálat deklaráltam. Ilyen módon összekapcsoltam a szálak objektumát (t) egy futtatható objektummal (rt). Ezután a szálobjektum meghívja a szál indítási módszerét, amely tovább hívja a Runnablethread osztály futtatási módszerét. Ha nem kapcsoltam össze a futtatható objektumot a szálat tartalmazó objektummal, akkor a szálak indítási módszere meghívta volna a szálak osztály futtatási módszerét. Most ismét a szálak két szálat tartalmaznak a kódban: a fő szál és a fő szál létrehozza a gyermek szálot, és mindkettőt egyszerre hajtják végre, de a pontos kimenetet soha nem tehetjük úgy.

A Java és a szál és a futtatható kulcsfontosságú különbségek

  1. A szálak osztályának kiterjesztésével létrehozott egyes szálak egyedi objektumot hoznak létre, és társulhatnak az adott objektumhoz. Másrészt, a futtatható felület megvalósításával létrehozott egyes szálak ugyanazt a futtatható példányt osztják.
  2. Mivel az egyes szálak egy szál objektumhoz vannak társítva, amikor a szál osztály kibővítésével készülnek, további memóriára van szükség. Másrészt, a Runnable felület megvalósításával létrehozott egyes szálak ugyanazt az objektumterületet osztják meg, így kevesebb memóriát igényel.
  3. Ha kibővíti a szálaosztályt, akkor tovább örökíthet bármely más osztályt, mivel a Java nem engedi meg a többszörös öröklést, míg a Runnable megvalósítása továbbra is lehetőséget nyújt arra, hogy az osztály örököljön bármely más osztályt.
  4. A szálosztályt csak akkor kell kibővíteni, ha felül kell írnia vagy specializálnia kell a szál osztály más módszereit. A futtatható felületet csak akkor kell megvalósítania, ha csak a futtatási módszert szeretné specializálni.
  5. A szál osztály kibővítése szoros csatolást eredményez a kódban, mivel a szál kódját és a szál feladatát ugyanaz az osztály tartalmazza. Másrészt a Runnable implementáló felülete laza csatolást vezet be a kódban, mivel a szál kódja elkülönül a szálhoz hozzárendelt munkától.

Következtetés:

A szálak osztályának kiterjesztése helyett inkább egy futtatható felületet valósít meg. Mivel a Runnable végrehajtása lassan összekapcsolja a kódot, mivel a szál kódja különbözik az osztálytól, amelyik hozzárendelte a szálat. Kevesebb memóriát igényel, és lehetővé teszi az osztály számára, hogy bármely más osztályt örököljön.