/ / Сценарий за разширяване на клас 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

Runnable интерфейс означава задаване на едно задание на много нишки докато клас Thread, всеки от потоците има уникален обект, свързан с него.


-1 за отговор № 5

Прилагането на изпълним интерфейс би било за предпочитане, когато имате нужда от повече гъвкавост при разширяване на други базови класове.