logo

Multithreading v Jave

Multithreading je funkcia Java, ktorá umožňuje súčasné vykonávanie dvoch alebo viacerých častí programu pre maximálne využitie CPU. Každá časť takéhoto programu sa nazýva vlákno. Takže vlákna sú ľahké procesy v rámci procesu.

Vlákna je možné vytvárať pomocou dvoch mechanizmov:



  1. Rozšírenie triedy Thread
  2. Implementácia Runnable Interface

Vytváranie vlákien rozšírením triedy Thread
Vytvárame triedu, ktorá rozširuje java.lang.Vlákno trieda. Táto trieda prepíše metódu run() dostupnú v triede Thread. Vlákno začína svoj život v metóde run(). Vytvoríme objekt našej novej triedy a zavoláme metódu start() na spustenie vykonávania vlákna. Start() vyvolá metódu run() na objekte Thread.

Java








// 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(); } } }>

cpp sa rovná
>

>

Výkon

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>

Vytváranie vlákien implementáciou Runnable Interface
Vytvárame novú triedu, ktorá implementuje rozhranie java.lang.Runnable a prepíše metódu run(). Potom vytvoríme inštanciu objektu Thread a na tento objekt zavoláme metódu start().

Java




// 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ýkon

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>

Trieda vlákien vs. Spustiteľné rozhranie

  1. Ak rozšírime triedu Thread, naša trieda nemôže rozšíriť žiadnu inú triedu, pretože Java nepodporuje viacnásobnú dedičnosť. Ak však implementujeme rozhranie Runnable, naša trieda môže stále rozširovať ďalšie základné triedy.
  2. Základnú funkčnosť vlákna môžeme dosiahnuť rozšírením triedy Thread, pretože poskytuje niektoré vstavané metódy ako yield(), interrupt() atď., ktoré nie sú dostupné v rozhraní Runnable.
  3. Použitie runnable vám poskytne objekt, ktorý možno zdieľať medzi viacerými vláknami.