logo

Multithreading en Java

El multithreading és una característica de Java que permet l'execució simultània de dues o més parts d'un programa per a la màxima utilització de la CPU. Cada part d'aquest programa s'anomena fil. Per tant, els fils són processos lleugers dins d'un procés.

Els fils es poden crear mitjançant dos mecanismes:



  1. Ampliant la classe Thread
  2. Implementació de la interfície executable

Creació de fils ampliant la classe Thread
Creem una classe que amplia el java.lang.Thread classe. Aquesta classe anul·la el mètode run() disponible a la classe Thread. Un fil comença la seva vida dins del mètode run(). Creem un objecte de la nostra nova classe i cridem al mètode start() per iniciar l'execució d'un fil. Start() invoca el mètode run() a l'objecte 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(); } } }>

multiplicació matricial en c
>

>

Sortida

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>

Creació de fil mitjançant la implementació de la interfície Runnable
Creem una nova classe que implementa la interfície java.lang.Runnable i anul·la el mètode run(). A continuació, instanciem un objecte Thread i cridem al mètode start() en aquest objecte.

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

>

>

Sortida

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>

Classe de fil vs interfície executable

  1. Si estenem la classe Thread, la nostra classe no pot ampliar cap altra classe perquè Java no admet l'herència múltiple. Però, si implementem la interfície Runnable, la nostra classe encara pot estendre altres classes base.
  2. Podem aconseguir la funcionalitat bàsica d'un fil ampliant la classe Thread perquè proporciona alguns mètodes integrats com yield(), interrupció() etc. que no estan disponibles a la interfície Runnable.
  3. L'ús de runnable us donarà un objecte que es pot compartir entre diversos fils.