/ / Сценарій розширення класу Thread та реалізації інтерфейсу Runnable [дублікат] - java, багатопотоковість, запуску

Сценарій розширення класу Thread і виконання Runnable інтерфейсу [duplicate] - java, multithreading, runnable

Я новачок в програмуванні теми на Java і, отже, це основне питання. (Я перевірив, але не міг знайти це запитання раніше)

Я читав, що потоки можна створити або успадкувавши клас Thread, або реалізуючи інтерфейс Runnable. Я побачив код, який мав обидва до одного класу.

public class ThreadExample extends Thread implements Runnable {
}

Мені було цікаво, яка ситуація хотіла б цього і чи є якась перевага в цьому, що це таке?

Відповіді:

11 за відповідь № 1

продовження Thread і реалізація Runnable марно (Thread вже реалізує Runnable). Ви досить багато завжди хочу реалізувати Runnableні продовжити Thread). Це дає вам гнучкість використання Thread безпосередньо (не рекомендується) або за допомогою одного з нових ThreadPool реалізації в java.util.concurrent (рекомендується).


4 для відповіді № 2

Ні, немає переваги використання цього підходу, тому що, клас Thread реалізує інтерфейс Runnable. Отже, якщо ваш клас поширює клас Thread. Це означає, що він також реалізує інтерфейс Runnable.

http://www.developerfusion.com/pix/articleimages/may05/javathread3.jpg


4 для відповіді № 3

У цій конкретній ситуації це не дуже корисно, тому що інші афіші пояснили це досить очевидно, що Thread вже реалізує Runnable.

В дещо випадки "викладення очевидного" можуть бути кориснимиоднак, як "нагадування" для користувача вашого класу: якщо у вас досить велика ієрархія суперкласів та інтерфейсів, з кількома рівнями успадкування (деякі з них у сторонніх бібліотеках), це може бути корисним як помічник оголосити клас таким, що реалізує певний інтерфейс, навіть якщо він реалізує його за визначенням оскільки його суперклас вже реалізує його або реалізує один з підкласів цього інтерфейсу.

Це особливо корисно для маркери інтерфейсів (деякі люди можуть заперечити, що їх не слід використовувативзагалі, і це погані практики - добре, що іноді ви не контролюєте навколишнє середовище повною мірою), тобто інтерфейси, які не мають реальної реалізації, і лише розроблені для позначення вашого об'єкта, придатного до спеціальної функції (наприклад, Cloneable). У такому випадку маркування кожного із дозволених занять, навіть якщо їхні батьки вже мають право, може бути більш чітким, тим кориснішим.


-1 для відповіді № 4

Інтерфейс, який можна запустити, означає призначити одне завдання багатьом потокам в той час як клас теми, кожен з потоків має унікальний об'єкт, пов'язаний з ним.


-1 для відповіді № 5

Реалізація інтерфейсу, що виконується, буде кращим, коли вам потрібна більша гнучкість розширення інших базових класів.