Разлика между клас на резбата и изпълним интерфейс в Java

Автор: Laura McKinney
Дата На Създаване: 1 Април 2021
Дата На Актуализиране: 11 Може 2024
Anonim
CS50 2013 - Week 1
Видео: CS50 2013 - Week 1

Съдържание


Нишката може да бъде дефинирана по два начина. Първо от разширяване на клас на тема който вече е изпълнил Runnable интерфейс. Второ, директно внедряване на Runnable интерфейс, Когато дефинирате нишка чрез разширяване на клас Thread, трябва да замените метода run () в клас Thread. Когато дефинирате нишка, осъществяваща интерфейс Runnable, трябва да приложите единствения метод run () на Runnable интерфейс. Основната разлика между Thread и Runnable е, че всяка нишка, дефинирана чрез разширяване на клас Thread, създава уникален обект и се свързва с този обект. От друга страна, всяка нишка, дефинирана чрез внедряване на Runnable интерфейс, споделя един и същ обект.

Нека наблюдаваме някои други разлики между Thread и Runnable с помощта на сравнителната диаграма, показана по-долу:

  1. Сравнителна диаграма
  2. дефиниция
  3. Ключови разлики
  4. заключение

Сравнителна диаграма

Основа за сравнениенишкаИзпълнима
ОсновенВсяка нишка създава уникален обект и се свързва с него.Множество нишки споделят едни и същи обекти.
памет Тъй като всяка нишка създава уникален обект, се изисква повече памет.Тъй като множество нишки споделят един и същ обект, използва се по-малко памет.
РазширяванеВ Java множественото наследяване не е позволено, следователно, след като класът разширява класа Thread, той не може да разширява никой друг клас.Ако клас дефинира нишка, реализираща интерфейса Runnable, той има шанс да разшири един клас.
употреба Потребителят трябва да разшири класа на нишката, само ако иска да отмени другите методи в клас Thread.Ако искате само да специализирате метода на изпълнение, тогава прилагането на Runnable е по-добър вариант.
Свързващ Разширяването на клас на резбата въвежда плътно свързване, тъй като класът съдържа код от клас Thread и също така заданието, присвоено на нишкатаВнедряването на Runnable интерфейс въвежда хлабава връзка, тъй като кодът на нишката е отделен от заданието на нишките.


Определение за клас на резбата

нишка е клас в java.lang пакет. Класът Thread се простира на обект клас и той изпълнява Изпълнима интерфейси. Класът Thread има конструктори и методи за създаване и работа с нишката. Когато създаваме множество нишки, всяка нишка създава уникален обект и се свързва с този обект. Ако създадете нишка, разширяваща клас Thread, по-нататък не можете да разширите никой друг клас, тъй като java не поддържа множествено наследяване. Така че, вие трябва да изберете да разширите класа Thread само когато искате да замените някои други методи от клас Thread. Нека видим пример за създаване на нишка, разширяваща клас на тема.

/ * Дефиниране на нишка * / Class Mythread разширява нишката {/ * задача на нишката * / public void run () {for (int i = 0; i <10; i ++) {System.Out.ln ("Child Thread" ); }} Class mainThread {/ * задача на основната нишка * / public static void main (String args) {Mythread mt = new Mythread (); / * главната нишка създаде дъщерната нишка * / mt.start (); за (int i = 0; i <10; i ++) {System.Out. ("Основна нишка"); }}} / * Изход * / Основна нишка Основна нишка Основна нишка Главна нишка Детска нишка Детска нишка Детска нишка Детска нишка Детска нишка Главна нишка Детска нишка Главна нишка Главна нишка Детска нишка Детска нишка Главна нишка Главна нишка Детска нишка Детска нишка Основна нишка

В горния код създавам клас Mythread, който разширява класа Thread и отменя метода на изпълнение на клас Thread. В класа, съдържащ основния метод, създавам обект на нишка (mt) от клас Mythread и използвайки обекта с нишка, извика метода start (). Методът на стартиране започва изпълнението на нишката и в същото време JVM извиква метода на изпълнение на нишката. Сега в програмата има две нишки, една главна нишка и втора дънна нишка, създадена от основната нишка. Изпълнението и на двете нишки става едновременно, но, точният изход не може да се преструва.


Дефиниция на изпълним интерфейс

Изпълнима е интерфейс в java.lang пакет. Реализиране на Runnable интерфейс можем да определим нишка. Интерфейсът, който може да се изпълнява, има един метод пробег (), която се реализира от класа, който реализира Runnable интерфейс. Когато решите да дефинирате нишка, изпълняваща Runnable интерфейс, все още имате избор да разширите всеки друг клас. Когато създавате няколко нишки чрез внедряване на Runnable интерфейс, всяка нишка споделя един и същ екземпляр за изпълнение. нека да научим как да дефинираме нишка, използвайки Runnable интерфейс.

/ * Дефиниране на нишка * / Class Runnablethread изпълнява Runnable {/ * задача на нишката * / public void run () {for (int i = 0; i <10; i ++) {System.Out.ln ("Детска нишка" ); }} Class mainThread {/ * задача на основната тема * / public static void main (String args) {Mythread rt = new Mythread (); / * основна нишка създаде изпълним обект * / Тема t = нова тема (rt); / * главната нишка създава дънна нишка и премина обекта, който може да се изпълни * / t.start (); за (int i = 0; i <10; i ++) {System.Out. ("Основна нишка"); }}} / * Изход * / Основна нишка Основна нишка Основна нишка Главна нишка Детска нишка Детска нишка Детска нишка Детска нишка Детска нишка Главна нишка Детска нишка Главна нишка Главна нишка Детска нишка Детска нишка Главна нишка Главна нишка Детска нишка Детска нишка Основна нишка

В горния код създадох клас Runnablethread клас, който реализира Runnable интерфейс и дефинира задачата на нишката чрез прилагане на метода run () на интерфейса Runnable. Тогава създавам клас mainthread, съдържащ основния метод. Вътре в основния метод декларирах изпълним обект от клас Runnablethread и предадох този обект на конструктора на темата, докато декларирах нишка. По този начин свързах обекта на нишката (t) с обект, който може да се изпълни (rt). Тогава обектът на нишката извиква стартовия метод на нишката, който допълнително извиква метода на изпълнение на класа Runnablethread. Ако не бях свързал изпълним обект с обект Thread, тогава методът за стартиране на нишки щеше да се позове на метода run от клас Thread. Сега, отново има две нишки в кода, основната нишка и основната нишка създава дънна нишка и двете се изпълняват едновременно, но точният изход никога не може да бъде предрешен.

Ключови разлики между конци и изпълними в Java

  1. Всяка нишка, създадена чрез разширяване на класа Thread, създава уникален обект за нея и се свързва с този обект. От друга страна, всяка нишка, създадена чрез внедряване на интерфейс Runnable, споделят един и същ екземпляр за изпълнение.
  2. Тъй като всяка нишка е свързана с уникален обект, когато е създадена чрез разширяване на клас Thread, се изисква повече памет. От друга страна, всяка нишка, създадена чрез внедряване на Runnable интерфейс, споделя едно и също обектно пространство, затова изисква по-малко памет.
  3. Ако разширите класа Thread след това, можете да наследите всеки друг клас, тъй като Java не позволява множествено наследяване, докато прилагането на Runnable все още предоставя шанс на клас да наследи всеки друг клас.
  4. Човек трябва да разшири клас Thread само ако трябва да отмени или специализира някои други методи от клас Thread. Трябва да внедрите Runnable интерфейс, ако искате да специализирате само метод на стартиране.
  5. Разширяването на класа Thread въвежда плътно свързване в кода, тъй като кодът на Thread и task of thread се съдържа от същия клас. От друга страна, внедряването на Runnable интерфейс въвежда свободно свързване в кода, тъй като кодът на нишката е отделен от заданието, присвоено на нишката.

Заключение:

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