Rozdiel medzi triedou vlákien a spustiteľným rozhraním v jazyku Java

Autor: Laura McKinney
Dátum Stvorenia: 1 Apríl 2021
Dátum Aktualizácie: 14 Smieť 2024
Anonim
Rozdiel medzi triedou vlákien a spustiteľným rozhraním v jazyku Java - Technológie
Rozdiel medzi triedou vlákien a spustiteľným rozhraním v jazyku Java - Technológie

Obsah


Vlákno možno definovať dvoma spôsobmi. Najprv autor: rozšírenie triedy vlákna ktorý už implementoval rozhranie Runnable. Po druhé, priamo implementácia rozhrania Runnable, Keď definujete vlákno rozšírením triedy vlákna, musíte prepísať metódu run () v triede vlákna. Keď definujete vlákno implementujúce rozhranie Runnable, musíte implementovať metódu only run () rozhrania Runnable. Základný rozdiel medzi vláknami a spustiteľnými je v tom, že každé vlákno definované rozšírením triedy vlákna vytvára jedinečný objekt a je s ním spojený. Na druhej strane každé vlákno definované implementáciou rozhrania Runnable zdieľa rovnaký objekt.

Pozrime sa na niektoré ďalšie rozdiely medzi vláknami a runnable pomocou porovnávacej tabuľky uvedenej nižšie:


  1. Porovnávacia tabuľka
  2. definícia
  3. Kľúčové rozdiely
  4. záver

Porovnávacia tabuľka

Základ pre porovnaniezávitRunnable
základnéKaždé vlákno vytvára jedinečný objekt a je s ním spojené.Rovnaké objekty zdieľajú viaceré vlákna.
Pamäť Pretože každé vlákno vytvára jedinečný objekt, vyžaduje sa viac pamäte.Pretože viac vlákien zdieľa ten istý objekt, používa sa menej pamäte.
rozšírenieV Jave nie je povolená viacnásobná dedičnosť, potom, čo trieda rozšíri triedu vlákien, nemôže rozšíriť inú triedu.Ak trieda definuje vlákno implementujúce rozhranie Runnable, má šancu rozšíriť jednu triedu.
použitie Užívateľ musí rozšíriť triedu vlákien iba vtedy, ak chce prepísať ostatné metódy v triede vlákien.Ak sa chcete špecializovať iba na metódu run, potom je implementácia Runnable lepšou možnosťou.
spojka Rozšírenie triedy vlákna predstavuje tesné spojenie, pretože trieda obsahuje kód triedy vlákna a tiež úlohu priradenú k vláknuImplementácia rozhrania Runnable zavádza voľnú väzbu, pretože kód vlákna je samostatnou úlohou Threads.


Definícia triedy vlákna

závit je trieda v java.lang zabaliť. Vlákno triedy rozširuje objekt triedy, a to implementuje Runnable rozhranie. Trieda vlákien má konštruktory a metódy na vytváranie a prácu na vlákne. Keď vytvoríme viac vlákien, každé vlákno vytvorí jedinečný objekt a bude s ním spojený. Ak vytvoríte vlákno rozširujúce vlákno triedy, ďalej nemôžete rozširovať žiadnu inú triedu, pretože java nepodporuje viacnásobné dedičstvo. Mali by ste sa preto rozhodnúť rozšíriť triedu vlákien iba vtedy, keď chcete prepísať aj iné metódy triedy vlákien. Pozrime sa na príklad vytvorenia vlákna rozširujúceho triedu vlákna.

/ * Definovanie vlákna * / Trieda Mythread rozširuje vlákno {/ * úloha vlákna * / verejné void run () {pre (int i = 0; i <10; i ++) {System.Out.ln ("Child Thread") ); }} Trieda mainThread {/ * úloha hlavného vlákna * / public static void main (String args) {Mythread mt = new Mythread (); / * hlavné vlákno vytvorilo podradené vlákno * / mt.start (); pre (int i = 0; i <10; i ++) {System.Out. ("Hlavné vlákno"); }}} / * Výstup * / Hlavný závit Hlavný závit Hlavný závit Hlavný závit Detský závit Detský závit Detský závit Detský závit Detský závit Detský závit Hlavný závit Detský závit Hlavný závit Detský závit Detský závit Detský závit Hlavný závit Detský závit Detský závit Hlavný závit

Vo vyššie uvedenom kóde vytváram triedu Mythread, ktorá rozširuje triedu Thread a prepíše metódu run triedy Thread. V triede obsahujúcej hlavnú metódu vytváram vláknový objekt (mt) triedy Mythread a pomocou vláknového objektu vyvolala metódu start (). Metóda štart spustí vykonávanie vlákna a zároveň JVM vyvolá metódu run vlákna. Teraz sú v programe dve vlákna, jedno hlavné vlákno a druhé podradené vlákno vytvorené hlavným vláknom. K vykonaniu oboch vlákien dochádza súčasne, presný výstup však nemožno predstierať.

Definícia spustiteľného rozhrania

Runnable je rozhranie v java.lang zabaliť. Implementáciou rozhrania Runnable môžeme definovať vlákno. Spustiteľné rozhranie má jednu metódu run (), ktorý je implementovaný triedou, ktorá implementuje spustiteľné rozhranie. Ak sa rozhodnete definovať vlákno implementujúce rozhranie Runnable, stále máte možnosť rozšíriť ktorúkoľvek inú triedu. Keď vytvoríte viac vlákien implementáciou rozhrania Runnable, každé vlákno zdieľa rovnakú spustiteľnú inštanciu. naučme sa, ako definovať vlákno pomocou spustiteľného rozhrania.

/ * Definovanie vlákna * / Trieda Runnablethread implementuje Runnable {/ * úlohu vlákna * / public void run () {for (int i = 0; i <10; i ++) {System.Out.ln ("Child Thread") ); }} Trieda mainThread {/ * úloha hlavného vlákna * / public static void main (String args) {Mythread rt = new Mythread (); / * hlavné vlákno vytvorilo spustiteľný objekt * / vlákno t = nové vlákno (rt); / * hlavné vlákno vytvára podradené vlákno a prešlo spustiteľným objektom * / t.start (); pre (int i = 0; i <10; i ++) {System.Out. ("Hlavné vlákno"); }}} / * Výstup * / Hlavný závit Hlavný závit Hlavný závit Hlavný závit Detský závit Detský závit Detský závit Detský závit Detský závit Detský závit Hlavný závit Detský závit Hlavný závit Detský závit Detský závit Detský závit Hlavný závit Detský závit Detský závit Hlavný závit

Vo vyššie uvedenom kóde som vytvoril triedu Runnablethread, ktorá implementuje rozhranie Runnable a definuje úlohu vlákna implementáciou metódy run () rozhrania Runnable. Potom vytvorím mainthread triedy obsahujúci hlavnú metódu. V rámci hlavnej metódy som deklaroval spustiteľný objekt triedy Runnablethread a pri deklarovaní vlákna som tento objekt odovzdal konštruktorovi vlákna. Týmto spôsobom som prepojil vláknitý objekt (t) s spustiteľným objektom (rt). Potom objekt vlákna vyvolá metódu štart vlákna, ktorá ďalej vyvolá metódu runnablethread triedy. Keby som neprepojil spustiteľný objekt s objektom vlákna, potom metóda spustenia vlákien by vyvolala metódu run triedy Thread. Teraz opäť existujú dve vlákna v kóde, hlavné vlákno a hlavné vlákno vytvára podriadené vlákno, ktoré sa vykonáva súčasne, ale presný výstup nemožno nikdy predstierať.

Hlavné rozdiely medzi vláknami a spustiteľnými súbormi v Jave

  1. Každé vlákno vytvorené rozšírením triedy vlákna vytvára preň jedinečný objekt a je s ním spojený. Na druhej strane každé vlákno vytvorené implementáciou rozhrania Runnable zdieľa rovnakú inštanciu Runnable.
  2. Pretože každé vlákno je pri vytvorení rozšírením triedy vlákna spojené s jedinečným objektom, vyžaduje sa viac pamäte. Na druhej strane každé vlákno vytvorené implementáciou rozhrania Runnable zdieľa rovnaký priestor objektov, preto vyžaduje menej pamäte.
  3. Ak triedu vlákna rozšírite ďalej, môžete zdediť akúkoľvek inú triedu, pretože Java neumožňuje viacnásobné dedičstvo, zatiaľ čo implementácia Runnable stále poskytuje šancu triede zdediť akúkoľvek inú triedu.
  4. Jeden musí rozšíriť triedu vlákien, iba ak musí prepísať alebo špecializovať niektoré iné metódy triedy vlákien. Rozhranie Runnable musíte implementovať, ak sa chcete špecializovať iba na metódu run.
  5. Rozšírenie triedy vlákna zavádza úzke spojenie v kóde, pretože kód vlákna a úloha vlákna sú obsiahnuté v rovnakej triede. Na druhej strane implementačné rozhranie Runnable zavádza voľnú väzbu v kóde, pretože kód vlákna je oddelený od úlohy priradenej vláknu.

záver:

Je výhodné implementovať rozhranie Runnable namiesto rozšírenia triedy vlákna. Pri implementácii Runnable sa váš kód voľne spáruje, pretože kód vlákna sa líši od triedy, ktorá úlohe priradí vlákno. Vyžaduje menej pamäte a tiež umožňuje triede zdediť akúkoľvek inú triedu.