Разлика између класе нити и интерфејса који се може извести на Јави

Аутор: Laura McKinney
Датум Стварања: 1 Април 2021
Ажурирати Датум: 14 Може 2024
Anonim
9. Programiranje - JAVA - ECLIPSE - Apstraktne klase i Interfejsi
Видео: 9. Programiranje - JAVA - ECLIPSE - Apstraktne klase i Interfejsi

Садржај


Конац се може дефинисати на два начина. Прво, од проширивање класе нити који је већ имплементирао Руннабле интерфејс. Друго, директно имплементација Руннабле интерфејса. Када дефинирате нит ширењем Тхреад класе, морате пребрисати методу рун () у класи Тхреад. Када дефинирате нит која имплементира Руннабле интерфејс, морате имплементирати једини рун () метод Руннабле интерфејса. Основна разлика између Тхреад-а и Руннабле-а је у томе што свака нит дефинирана проширењем класе Тхреад-а ствара јединствени објект и повезује се с тим објектом. Са друге стране, свака нит дефинирана имплементацијом Руннабле интерфејса дијели исти објект.

Промотримо неке друге разлике између Тхреад-а и Руннабле-а уз помоћ упоредног графикона приказаног у наставку:

  1. Упоредни графикон
  2. Дефиниција
  3. Кључне разлике
  4. Закључак

Упоредни графикон

Основе за упоређивањеКонацРуннабле
ОсновниСвака нит ствара јединствени објект и повезује се с њим.Више нити дијели исте предмете.
Меморија Како свака нит ствара јединствени објект, потребно је више меморије.Како више нити дијели исти објект, тако се користи и мање меморије.
ПродужењеУ Јави вишеструко наслеђивање није дозвољено, па после класе проширује класу Тхреад, не може проширити ниједну другу класу.Ако класа дефинира нит имплементирајући Руннабле интерфејс, она има шансу проширити једну класу.
Употреба Корисник мора проширити класу нити само ако жели надјачати остале методе у класи Тхреад.Ако желите да се специјализујете само начин извођења, онда је примена Руннабле-а боља опција.
Квачило Проширење класе нити уводи чврсто спајање јер класа садржи шифру класе нити и посао додељен нитиИмплементација Руннабле интерфејса уводи лабаво спајање јер је код Тхреад-а одвојен од задатка Тхреадс.


Дефиниција класе навоја

Конац је класа у јава.ланг пакет. Класа Тхреад продужава ан Објект класе, и то реализује Руннабле интерфејси. Класа Тхреад има конструкторе и методе за креирање и рад на нити. Када створимо више нити, свака нит ствара јединствени објект и повезујемо се с тим објектом. Ако створите нит која проширује класу Тхреад-а, даље не можете проширити ниједну другу класу јер јава не подржава вишеструко наслеђивање. Дакле, требали бисте изабрати да проширите класу Тхреад-а само када желите да надјачате неке друге методе класе Тхреад. Погледајмо пример креирања нити која проширује класу Тхреад.

/ * Дефинисање нити * / Класа Митхреад продужује Тхреад {/ * задатак нити * / публиц воид рун () {фор (инт и = 0; и <10; и ++) {Систем.Оут.лн ("Цхилд Тхреад" ); }} Цласс маинТхреад {/ * посао главне нити * / јавни статички воид маин (Стринг аргс) {Митхреад мт = нови Митхреад (); / * главна нит је креирала подређени нит * / мт.старт (); фор (инт и = 0; и <10; и ++) {Систем.Оут. ("главна нит"); }}} / * Излаз * / главни навој Главна нит главна нит главна глава навоја дечја нит Деца нит нит детета нит детета нит деца главна нит дечија нит главна глава главна нит главна нит детета нит деца главна нит главна нит основна нит детета нит

У горњем коду креирам класу Митхреад која проширује класу Тхреад и надјачава метод покретања класе Тхреад. У класи која садржи главни метод креирам нитни објект (мт) класе Митхреад и користећи нитни објект позвао је методу старт (). Метода покретања започиње извршење нити и ЈВМ истовремено позива метод покретања нити. Сада су у програму две нити једна главна нит и друга подређена нит коју је створила главна нит. Извођење обе нити догађа се истовремено, али не може се претпоставити тачан излаз.


Дефиниција Руннабле Интерфаце-а

Руннабле је интерфејс у јава.ланг пакет. Имплементацијом Руннабле интерфејса можемо дефинирати нит. Изводљиви интерфејс има једну методу трцати(), који имплементира класа која имплементира Руннабле интерфејс. Када одлучите да дефинирате нит имплементирајући Руннабле интерфејс, још увек имате избор да проширите било коју другу класу. Када креирате више нити имплементирањем Руннабле интерфејса, свака нит дијели исту инстанцу која се може покренути. научимо како да дефинишемо нит помоћу Руннабле интерфејса.

/ * Дефинисање нити * / Класа Руннаблетхреад имплементира Руннабле {/ * посао нити * / публиц воид рун () {фор (инт и = 0; и <10; и ++) {Систем.Оут.лн ("Цхилд Тхреад" ); }} Цласс маинТхреад {/ * посао главне нити * / јавни статички воид маин (Стринг аргс) {Митхреад рт = нови Митхреад (); / * главна нит је створила објект који се може покренути * / Тхреад т = нев Тхреад (рт); / * главна нит ствара подређени нит и просљеђује објект који се може покренути * / т.старт (); фор (инт и = 0; и <10; и ++) {Систем.Оут. ("главна нит"); }}} / * Излаз * / главни навој Главна нит главна нит главна глава навоја дечја нит Деца нит нит детета нит детета нит деца главна нит дечија нит главна глава главна нит главна нит детета нит деца главна нит главна нит основна нит детета нит

У горе наведеном коду створио сам класу Руннаблетхреад која имплементира Руннабле интерфејс и дефинише задатак нити применом методе рун () Руннабле интерфејса. Тада креирам класно главно коло које садржи главни метод. Унутар главне методе, декларирао сам објект који се може покренути разредом Руннаблетхреад и прослиједио овај објект Конструктору Тхреад-а док сам декларирао нит. На овај начин сам повезао објект нити (т) са објектом који се може покренути (рт). Затим објект нити позива позив на стартну нит који даље позива методу покрета класе Руннаблетхреад. Да нисам повезао извршиви објект са Тхреад објектом, тада би метода стартних нити позвала методу покретања класе Тхреад. Сада, опет, постоје две нити у коду, главна нит и главна нит стварају подређени нит оба се извршавају истовремено, али тачан излаз се никада не може претварати.

Кључне разлике између нити и нити које се може изводити у Јави

  1. Свака нит створена проширењем класе Тхреад ствара јединствени објект за њу и повезује се с тим објектом. С друге стране, свака нит створена имплементацијом Руннабле интерфејса има исту инстанцу коју може да се покреће.
  2. Како је свака нит повезана са јединственим објектом када је створена проширивањем класе Тхреад-а, потребно је више меморије. С друге стране, свака нит створена имплементацијом Руннабле интерфејса има исти простор објекта, па му је потребно мање меморије.
  3. Ако даље проширите класу Тхреад, можете наследити било коју другу класу јер Јава не дозвољава вишеструко наслеђивање док применом Руннабле-а и даље даје шансу да класа наследи било коју другу класу.
  4. Мора се проширити класа Тхреад само ако мора надјачати или специјализовати неке друге методе класе Тхреад. Морате имплементирати Руннабле интерфејс ако желите само да се специјализујете само начин извођења.
  5. Проширење класе Тхреад уводи чврсто спајање у код, јер је шифра Тхреад и посао нити садржана у истој класи. С друге стране, Имплементинг Руннабле интерфејс уводи лабаво спајање у код, јер је код Тхреад-а одвојен од задатка додељеног нити.

Закључак:

Пожељно је имплементирати Руннабле интерфејс уместо продужавања класе Тхреад. Како имплементација Руннабле-а чини ваш код лагано повезан јер је код нити различит од класе која додељује посао нити. Потребно јој је мање меморије и такође омогућава класи да наследи било коју другу класу.