Multithreading je funkce Java, která umožňuje souběžné provádění dvou nebo více částí programu pro maximální využití CPU. Každá část takového programu se nazývá vlákno. Vlákna jsou tedy lehké procesy v rámci procesu.
Vlákna lze vytvářet pomocí dvou mechanismů:
- Rozšíření třídy Thread
- Implementace Runnable Interface
Vytvoření vlákna rozšířením třídy Thread
Vytvoříme třídu, která rozšiřuje java.lang.Vlákno třída. Tato třída přepíše metodu run() dostupnou ve třídě Thread. Vlákno začíná svůj život v metodě run(). Vytvoříme objekt naší nové třídy a zavoláme metodu start(), která spustí provádění vlákna. Start() vyvolá metodu run() na objektu Thread.
Jáva
// Java code for thread creation by extending> // the Thread class> class> MultithreadingDemo>extends> Thread {> >public> void> run()> >{> >try> {> >// Displaying the thread that is running> >System.out.println(> >'Thread '> + Thread.currentThread().getId()> >+>' is running'>);> >}> >catch> (Exception e) {> >// Throwing an exception> >System.out.println(>'Exception is caught'>);> >}> >}> }> // Main Class> public> class> Multithread {> >public> static> void> main(String[] args)> >{> >int> n =>8>;>// Number of threads> >for> (>int> i =>0>; i MultithreadingDemo object = new MultithreadingDemo(); object.start(); } } }> |
příklady binárních stromů
>
>Výstup
Thread 15 is running Thread 14 is running Thread 16 is running Thread 12 is running Thread 11 is running Thread 13 is running Thread 18 is running Thread 17 is running>
Vytvoření vlákna implementací Runnable Interface
Vytvoříme novou třídu, která implementuje rozhraní java.lang.Runnable a přepíše metodu run(). Poté vytvoříme instanci objektu Thread a zavoláme metodu start() na tomto objektu.
Jáva
// Java code for thread creation by implementing> // the Runnable Interface> class> MultithreadingDemo>implements> Runnable {> >public> void> run()> >{> >try> {> >// Displaying the thread that is running> >System.out.println(> >'Thread '> + Thread.currentThread().getId()> >+>' is running'>);> >}> >catch> (Exception e) {> >// Throwing an exception> >System.out.println(>'Exception is caught'>);> >}> >}> }> // Main Class> class> Multithread {> >public> static> void> main(String[] args)> >{> >int> n =>8>;>// Number of threads> >for> (>int> i =>0>; i Thread object = new Thread(new MultithreadingDemo()); object.start(); } } }> |
>
>Výstup
Thread 13 is running Thread 11 is running Thread 12 is running Thread 15 is running Thread 14 is running Thread 18 is running Thread 17 is running Thread 16 is running>
Třída vláken vs spustitelné rozhraní
- Pokud rozšíříme třídu Thread, naše třída nemůže rozšířit žádnou jinou třídu, protože Java nepodporuje vícenásobnou dědičnost. Ale pokud implementujeme rozhraní Runnable, naše třída může stále rozšířit další základní třídy.
- Základní funkčnosti vlákna můžeme dosáhnout rozšířením třídy Thread, protože poskytuje některé vestavěné metody jako yield(), interrupt() atd., které nejsou dostupné v rozhraní Runnable.
- Použití runnable vám poskytne objekt, který lze sdílet mezi více vlákny.