Wielowątkowość to funkcja Java, która umożliwia jednoczesne wykonywanie dwóch lub więcej części programu w celu maksymalnego wykorzystania procesora. Każda część takiego programu nazywana jest wątkiem. Zatem wątki są lekkimi procesami w procesie.
Wątki można tworzyć za pomocą dwóch mechanizmów:
- Rozszerzanie klasy Thread
- Implementowanie działającego interfejsu
Tworzenie wątku poprzez rozszerzenie klasy Thread
Tworzymy klasę rozszerzającą java.lang.Wątek klasa. Klasa ta zastępuje metodę run() dostępną w klasie Thread. Wątek rozpoczyna swoje życie wewnątrz metody run(). Tworzymy obiekt naszej nowej klasy i wywołujemy metodę start(), aby rozpocząć wykonywanie wątku. Start() wywołuje metodę run() na obiekcie Thread.
Jawa
// 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(); } } }> |
zawiera metodę Java
>
>Wyjście
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>
Tworzenie wątków poprzez implementację interfejsu Runnable
Tworzymy nową klasę, która implementuje interfejs java.lang.Runnable i nadpisuje metodę run(). Następnie tworzymy instancję obiektu Thread i wywołujemy metodę start() na tym obiekcie.
Jawa
// 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(); } } }> |
>
>Wyjście
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>
Klasa wątku a uruchamialny interfejs
- Jeśli rozszerzymy klasę Thread, nasza klasa nie będzie mogła rozszerzyć żadnej innej klasy, ponieważ Java nie obsługuje wielokrotnego dziedziczenia. Jeśli jednak zaimplementujemy interfejs Runnable, nasza klasa będzie nadal mogła rozszerzać inne klasy bazowe.
- Podstawową funkcjonalność wątku możemy osiągnąć poprzez rozszerzenie klasy Thread, ponieważ udostępnia ona pewne wbudowane metody, takie jak Yield(), przerwanie() itp., które nie są dostępne w interfejsie Runnable.
- Użycie runnable da ci obiekt, który może być współużytkowany przez wiele wątków.