/ / Scenár rozšírenia triedy Thread a implementácie spustiteľného rozhrania [duplikát] - java, multithreading, runnable

Scenár rozšírenia Trieda vlákien a implementácia rozhrania Runnable [duplicate] - java, multithreading, runnable

Som nováčik v programovaní vlákien v Jave, a teda táto základná otázka. (Skontroloval som, ale predtým som nemohol nájsť túto otázku)

Čítal som, že vlákna môžu byť vytvorené buď zdedením triedy Thread, alebo implementáciou rozhrania Runnable. Videl som kód, ktorý mal oba do tej istej triedy.

public class ThreadExample extends Thread implements Runnable {
}

Zaujímalo by ma, aká situácia by to chcela, a ak to má nejakú výhodu, aká to je.

odpovede:

11 pre odpoveď č. 1

predĺženie Thread a vykonávacie Runnable je zbytočné (Thread už realizuje Runnable). Ty pekne vždy chcete implementovať Runnable (a nie predĺžiť Thread). To vám dáva flexibilitu pri používaní a Thread priamo (neodporúča sa) alebo pomocou niektorého z novších ThreadPool implementácie v java.util.concurrent (Odporúča sa).


4 pre odpoveď č. 2

Nie, použitie tohto prístupu nemá žiadnu výhodu, pretože trieda Thread implementuje rozhranie Runnable. Ak teda vaša trieda presahuje triedu vlákien. Znamená to, že implementuje aj spustiteľné rozhranie.

http://www.developerfusion.com/pix/articleimages/may05/javathread3.jpg


4 pre odpoveď č. 3

V tejto konkrétnej situácii to nie je veľmi užitočné, pretože iné plagáty to vysvetlili, je to celkom zrejmé Thread už realizuje Runnable.

v niektorí prípadoch môže byť užitočné „uviesť zrejmé“len ako „pripomienka“ pre používateľa vašej triedy: ak máte pomerne veľkú hierarchiu supertried a rozhraní s niekoľkými úrovňami dedenia (niektoré z nich v knižniciach tretích strán), mohlo by to byť užitočné ako pomocník, ktorý deklaruje triedu ako implementujúcu konkrétne rozhranie, aj keď ho implementuje podľa definície pretože jeho nadtrieda ho už implementuje alebo implementuje jednu z podtriedy tohto rozhrania.

Je to obzvlášť užitočné pre značkovacie rozhrania (niektorí ľudia môžu namietať, že by sa nemali používaťvôbec, a sú to zlé praktiky - niekedy niekedy úplne neovládate prostredie), t. j. rozhrania bez skutočnej implementácie a určené iba na to, aby označili váš objekt ako vhodný pre špeciálnu funkciu (napr. Cloneable). V takom prípade môže byť označenie každej z povolených tried, aj keď už ich rodičia majú oprávnenie, jasnejšie a užitočnejšie.


-1 pre odpoveď č. 4

Spustiteľné rozhranie znamená priradenie jednej úlohy k viacerým vláknam zatiaľ čo trieda vlákien má každé vlákno priradený jedinečný objekt.


-1 pre odpoveď č. 5

Implementácia spustiteľného rozhrania by bola výhodnejšia, ak potrebujete väčšiu flexibilitu pri rozširovaní ďalších základných tried.