logo

Multithreading în Java

Multithreading este o caracteristică Java care permite executarea concomitentă a două sau mai multe părți ale unui program pentru utilizarea maximă a procesorului. Fiecare parte a unui astfel de program se numește fir. Deci, firele sunt procese ușoare în cadrul unui proces.

Firele pot fi create folosind două mecanisme:

  1. Extinderea clasei Thread
  2. Implementarea interfeței rulabile

Crearea thread-ului prin extinderea clasei Thread
Creăm o clasă care extinde java.lang.Thread clasă. Această clasă suprascrie metoda run() disponibilă în clasa Thread. Un fir își începe viața în cadrul metodei run(). Creăm un obiect din noua noastră clasă și apelăm metoda start() pentru a începe execuția unui fir. Start() invocă metoda run() pe obiectul 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(); } } }>

coarda inversată în c
>

>

Ieșire

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>

Crearea firelor de execuție prin implementarea interfeței Runnable
Creăm o nouă clasă care implementează interfața java.lang.Runnable și suprascrie metoda run(). Apoi instanțiem un obiect Thread și apelăm metoda start() pe acest obiect.

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

>

>

Ieșire

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>

Clasa de fir vs Interfață rulabilă

  1. Dacă extindem clasa Thread, clasa noastră nu poate extinde nicio altă clasă, deoarece Java nu acceptă moștenirea multiplă. Dar, dacă implementăm interfața Runnable, clasa noastră poate extinde în continuare alte clase de bază.
  2. Putem atinge funcționalitatea de bază a unui fir prin extinderea clasei Thread, deoarece oferă câteva metode încorporate, cum ar fi yield(), interrupt() etc., care nu sunt disponibile în interfața Runnable.
  3. Utilizarea runnable vă va oferi un obiect care poate fi partajat între mai multe fire.