Багатопотоковість — це функція Java, яка дозволяє одночасне виконання двох або більше частин програми для максимального використання ЦП. Кожна частина такої програми називається потоком. Отже, потоки — це легкі процеси в процесі.
Потоки можна створювати за допомогою двох механізмів:
- Розширення класу Thread
- Реалізація інтерфейсу Runnable
Створення потоку шляхом розширення класу Thread
Ми створюємо клас, який розширює java.lang.Thread клас. Цей клас замінює метод run(), доступний у класі Thread. Потік починає своє життя всередині методу run(). Ми створюємо об’єкт нашого нового класу та викликаємо метод start(), щоб почати виконання потоку. Start() викликає метод run() об’єкта 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(); } } }> |
fmoviez
>
>Вихід
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>
Створення потоку шляхом реалізації Runnable Interface
Ми створюємо новий клас, який реалізує інтерфейс java.lang.Runnable і перевизначає метод run(). Потім ми створюємо об’єкт Thread і викликаємо метод 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(); } } }> |
>
>Вихід
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>
Клас потоку проти виконуваного інтерфейсу
- Якщо ми розширимо клас Thread, наш клас не зможе розширити жодний інший клас, оскільки Java не підтримує множинне успадкування. Але, якщо ми реалізуємо інтерфейс Runnable, наш клас може розширювати інші базові класи.
- Ми можемо досягти базової функціональності потоку, розширивши клас Thread, оскільки він надає деякі вбудовані методи, такі як yield(), interrupt() тощо, які недоступні в інтерфейсі Runnable.
- Використання runnable дасть вам об’єкт, який можна спільно використовувати між кількома потоками.