Multithreading is een Java-functie die gelijktijdige uitvoering van twee of meer delen van een programma mogelijk maakt voor maximaal gebruik van de CPU. Elk deel van zo'n programma wordt een thread genoemd. Draden zijn dus lichtgewicht processen binnen een proces.
Threads kunnen worden gemaakt met behulp van twee mechanismen:
- Uitbreiding van de Thread-klasse
- Implementatie van de uitvoerbare interface
Het maken van threads door de Thread-klasse uit te breiden
We maken een klasse die de java.lang.Thread klas. Deze klasse overschrijft de methode run() die beschikbaar is in de klasse Thread. Een thread begint zijn leven binnen de run() -methode. We maken een object van onze nieuwe klasse en roepen de methode start() aan om de uitvoering van een thread te starten. Start() roept de methode run() aan op het Thread-object.
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(); } } }> |
roep de javascript-functie aan vanuit html
>
>Uitvoer
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>
Het maken van threads door de Runnable Interface te implementeren
We maken een nieuwe klasse die de java.lang.Runnable-interface implementeert en de run()-methode overschrijft. Vervolgens instantiëren we een Thread-object en roepen we de start()-methode aan voor dit object.
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(); } } }> |
>
>Uitvoer
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>
Threadklasse versus uitvoerbare interface
- Als we de klasse Thread uitbreiden, kan onze klasse geen enkele andere klasse uitbreiden omdat Java geen meervoudige overerving ondersteunt. Maar als we de Runnable-interface implementeren, kan onze klasse nog steeds andere basisklassen uitbreiden.
- We kunnen de basisfunctionaliteit van een thread bereiken door de Thread-klasse uit te breiden, omdat deze een aantal ingebouwde methoden biedt, zoals yield(), interrupt() enz. die niet beschikbaar zijn in de Runnable-interface.
- Als u runnable gebruikt, krijgt u een object dat door meerdere threads kan worden gedeeld.