logo

Јава мултитхреадинг и питања истовременог интервјуа

Вишенитност и синхронизација се сматрају типичним поглављем у јава програмирању. У компанијама које се баве развојем игара, питања за интервју у вези са мултитхреадингом се углавном постављају. У наставку је дата листа често постављаних питања о Јава мултитхреадинг и истовременом интервјуу.


Вишенитна питања за интервју

1) Шта је вишенитност?

Мултитхреадинг је процес извршавања више нити истовремено. Мултитхреадинг се користи за постизање вишеструког рада. Троши мање меморије и даје брзе и ефикасне перформансе. Његове главне предности су:

  • Нити деле исти адресни простор.
  • Конац је лаган.
  • Цена комуникације између процеса је ниска.
Детаљније.

2) Шта је нит?

Нит је лагани подпроцес. То је засебна путања извршења јер свака нит ради у другом оквиру стека. Процес може да садржи више нити. Нити деле ресурсе процеса, али се ипак извршавају независно.

Детаљније.

3) Разликовати између процеса и нити?

Постоје следеће разлике између процеса и нити.

  • Програм у извршењу назива се процес; Нит је подскуп процеса
  • Процеси су независни док су нити подскуп процеса.
  • Процеси имају различит адресни простор у меморији, док нити садрже заједнички адресни простор.
  • Пребацивање контекста је брже између нити у поређењу са процесима.
  • Интер-процесна комуникација је спорија и скупља од комуникације међу нитима.
  • Свака промена у родитељском процесу не утиче на подређени процес, док промене у надређеној нити могу утицати на подређену нит.

4) Шта разумете под комуникацијом између нити?

  • Процес комуникације између синхронизованих нити назива се комуникација међу нитима.
  • Комуникација између нити се користи да би се избегло испитивање нити у Јави.
  • Нит је паузирана у свом критичном делу, а другој нити је дозвољено да уђе (или закључа) у исту критичну секцију да би се извршила.
  • Може се добити методама ваит(), нотифи() и нотифиАлл().

5) Која је сврха ваит() методе у Јави?

Метод ваит() обезбеђује класа Објецт у Јави. Овај метод се користи за комуникацију између нити у Јави. јава.ланг.Објецт.ваит() се користи за паузирање тренутне нити и чекање док друга нит не позове методу нотифи() или нотифиАлл(). Његова синтакса је дата у наставку.

јавно коначно воид ваит()


6) Зашто се из синхронизованог блока мора позвати метода ваит()?

Морамо позвати метод чекања, иначе ће се избацити јава.ланг.ИллегалМониторСтатеЕкцептион изузетак. Штавише, потребна нам је метода ваит() за комуникацију између нити са нотифи() и нотифиАлл(). Због тога мора бити присутан у синхронизованом блоку за правилну и исправну комуникацију.


7) Које су предности мултитхреадинг-а?

Вишенитно програмирање има следеће предности:

  • Мултитхреадинг омогућава апликацији/програму да увек реагује на унос, чак и да већ ради са неким задацима у позадини
  • Мултитхреадинг омогућава брже извршавање задатака, јер се нити извршавају независно.
  • Мултитхреадинг обезбеђује боље коришћење кеш меморије пошто нити деле заједничке меморијске ресурсе.
  • Мултитхреадинг смањује број потребног сервера јер један сервер може да изврши више нити истовремено.

8) Која су стања у животном циклусу нити?

Нит може имати једно од следећих стања током свог животног века:

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

9) Која је разлика између превентивног заказивања и одсецања времена?

У оквиру превентивног планирања, задатак највишег приоритета се извршава све док не уђе у стање чекања или мртво стање или док се задатак вишег приоритета не појави. У оквиру временског пресека, задатак се извршава за унапред дефинисани део времена, а затим поново улази у скуп готових задатака. Планер затим одређује који задатак треба следећи да се изврши, на основу приоритета и других фактора.


10) Шта је промена контекста?

У пребацивању контекста стање процеса (или нити) се чува тако да може да се врати и да се извршавање може наставити са исте тачке касније. Промена контекста омогућава да више процеса деле исти ЦПУ.


11) Да ли правите разлику између класе Тхреад и Руннабле интерфејса за креирање нити?

Нит се може креирати на два начина.

  • Проширујући класу Тхреад
  • Имплементацијом Руннабле интерфејса

Међутим, основне разлике између оба начина су наведене у наставку:

  • Проширујући класу Тхреад, не можемо проширити ниједну другу класу, пошто Јава не дозвољава вишеструко наслеђивање док имплементира Руннабле интерфејс; такође можемо проширити другу основну класу (ако је потребно).
  • Проширујући класу Тхреад, свака нит креира јединствени објекат и повезује се са њим док имплементира Руннабле интерфејс; више нити деле исти објекат
  • Класа Тхреад пружа различите уграђене методе као што су гетПриорити(), исАливе и многе друге, док Руннабле интерфејс пружа једну методу, тј. рун().

12) Шта значи метода јоин()?

Метода јоин() чека да нит умре. Другим речима, узрокује да тренутно покренуте нити престану да се извршавају све док нит са којом се придружује не заврши свој задатак. Метода Јоин је преоптерећена у класи Тхреад на следеће начине.

  • публиц воид јоин() баца ИнтерруптедЕкцептион
  • публиц воид јоин (дуге милисекунде) баца ИнтерруптедЕкцептион
Детаљније.

13) Опишите сврху и рад методе слееп().

Метода слееп() у Јави се користи за блокирање нити за одређено време, што значи да паузира извршавање нити на одређено време. Постоје две методе за то.

Синтакса:

стринг низа у ц
  • јавна статична празнина спавања (дуге милисекунде) баца ИнтерруптедЕкцептион
  • публиц статиц воид слееп (дуге милисекунде, инт нанос) баца ИнтерруптедЕкцептион

Рад методе слееп().

Када позовемо методу слееп(), она паузира извршавање тренутне нити за дато време и даје приоритет другој нити (ако је доступна). Штавише, када се време чекања заврши, претходна нит поново мења своје стање из чекања у изводљиво и долази у стање покретања, а цео процес ради тако даље док се извршење не заврши.


14) Која је разлика између метода чекања() и спавања()?

чекати()спавај()
1) Метод ваит() је дефинисан у класи Објецт.Метода слееп() је дефинисана у класи Тхреад.
2) Метод ваит() отпушта закључавање.Метода слееп() не отпушта закључавање.

15) Да ли је могуће покренути нит двапут?

Не, не можемо поново покренути нит, јер када се нит покрене и изврши, она иде у мртво стање. Стога, ако двапут покушамо да покренемо нит, то ће дати рунтимеЕкцептион 'јава.ланг.ИллегалТхреадСтатеЕкцептион'. Размотрите следећи пример.

 public class Multithread1 extends Thread { public void run() { try { System.out.println('thread is executing now........'); } catch(Exception e) { } } public static void main (String[] args) { Multithread1 m1= new Multithread1(); m1.start(); m1.start(); } } 

Излаз

 thread is executing now........ Exception in thread 'main' java.lang.IllegalThreadStateException at java.lang.Thread.start(Thread.java:708) at Multithread1.main(Multithread1.java:13) 
Детаљније.

16) Можемо ли позвати методу рун() уместо старт()?

Да, директно позивање рун() методе је важеће, али неће радити као нит, већ ће радити као нормалан објекат. Неће бити пребацивања контекста између нити. Када позовемо методу старт(), она интерно позива методу рун(), која креира нови стек за нит док директни позив рун() неће створити нови стек.

Детаљније.

17) Шта је са демонским нитима?

Демонске нити су нити ниског приоритета које пружају подршку у позадини и услуге корисничким нитима. Даемон нит се аутоматски прекида од стране ЈВМ-а ако програм остане само са демонском нити, а све остале корисничке нити су окончане/умрле. Постоје две методе за демонску нит доступне у класи Тхреад:

    публиц воид сетДаемон (боолеан статус):Користи се за означавање нити демона нити или корисничке нити.јавни логички исДаемон():Проверава да ли је нит демон или не.
Детаљније.

18) Можемо ли направити корисничку нит као демонску нит ако је нит покренута?

Не, ако то урадите, избациће изузетак ИллегалТхреадСтатеЕкцептион. Према томе, можемо само да креирамо демонску нит пре него што покренемо нит.

 class Testdaemon1 extends Thread{ public void run(){ System.out.println('Running thread is daemon...'); } public static void main (String[] args) { Testdaemon1 td= new Testdaemon1(); td.start(); setDaemon(true);// It will throw the exception: td. } } 

Излаз

 Running thread is daemon... Exception in thread 'main' java.lang.IllegalThreadStateException at java.lang.Thread.setDaemon(Thread.java:1359) at Testdaemon1.main(Testdaemon1.java:8) 
Детаљније.

19) Шта је кука за искључивање?

Закачива за искључивање је нит која се имплицитно позива пре него што се ЈВМ искључи. Тако да можемо да га користимо да извршимо чишћење ресурса или сачувамо стање када се ЈВМ искључи нормално или нагло. Можемо додати закачицу за искључивање користећи следећи метод:

 public�void�addShutdownHook(Thread�hook){}�� Runtime r=Runtime.getRuntime(); r.addShutdownHook(new MyThread()); 

Неке важне тачке у вези са закачама за искључивање су:

  • Закачице за искључивање су иницијализоване, али се могу покренути само када је дошло до искључивања ЈВМ-а.
  • Закачице за искључивање су поузданије од финализатора() јер су врло мање шансе да се закачице за искључивање не покрену.
  • Закачивање за искључивање се може зауставити позивањем методе халт(инт) класе Рунтиме.
Детаљније.

20) Када треба да прекинемо нит?

Требало би да прекинемо нит када желимо да прекинемо стање мировања или чекања нити. Можемо прекинути нит тако што ћемо позвати интеррупт() и избацити ИнтерруптедЕкцептион.

Детаљније.

21) Шта је синхронизација?

Синхронизација је могућност контроле приступа више нити било ком дељеном ресурсу. Користи се:


  1. Да бисте спречили ометање нити.
  2. Да бисте спречили проблем конзистентности.

Када више нити покушавају да ураде исти задатак, постоји могућност погрешног резултата, стога да би уклонила овај проблем, Јава користи процес синхронизације који омогућава да се истовремено извршава само једна нит. Синхронизација се може постићи на три начина:

емоџи за иПхоне на андроиду
  • синхронизованом методом
  • синхронизованим блоком
  • статичком синхронизацијом

Синтакса за синхронизовани блок

 synchronized(object reference expression) { //code block } 
Детаљније.

22) Која је сврха Синхронизованог блока?

Синхронизовани блок се може користити за обављање синхронизације на било ком специфичном ресурсу методе. Само једна по једна нит може да се изврши на одређеном ресурсу, а све остале нити које покушавају да уђу у синхронизовани блок су блокиране.

  • Синхронизовани блок се користи за закључавање објекта за било који дељени ресурс.
  • Обим синхронизованог блока је ограничен на блок на који се примењује. Његов обим је мањи од методе.
Детаљније.

23) Да ли Јава објекат може бити закључан за ексклузивну употребу од стране дате нити?

Да. Можете закључати објекат тако што ћете га ставити у 'синхронизовани' блок. Закључани објекат је недоступан ниједној нити осим оној која га је експлицитно затражила.


24) Шта је статичка синхронизација?

Ако било коју статичку методу учините синхронизованом, закључавање ће бити на класи, а не на објекту. Ако користимо синцхронизед кључну реч пре методе тако да ће закључати објекат (једна нит може приступити објекту у исто време), али ако користимо статиц синцхронизед тако да ће закључати класу (једна нит може приступити класи у исто време). Детаљније.


25) Која је разлика између нотифи() и нотифиАлл()?

Нотифи() се користи за деблокирање једне нити на чекању, док се метода нотифиАлл() користи за деблокирање свих нити у стању чекања.

глобалне променљиве јс

26) Шта је застој?

Застој је ситуација у којој свака нит чека на ресурс који држи нека друга нит која чека. У овој ситуацији, ниједна нит се не извршава нити добија прилику да се изврши. Уместо тога, постоји универзално стање чекања међу свим нитима. Мртва блокада је веома компликована ситуација која може да разбије наш код током извршавања.

Детаљније.

27) Како открити стање застоја? Како се то може избећи?

Услов застоја можемо открити покретањем кода на цмд-у и прикупљањем Тхреад Думп-а, а ако је у коду присутна нека застоја, онда ће се на цмд-у појавити порука.

Начини да се избегне застој у Јави:

    Избегавајте угнежђено закључавање:Угнежђено закључавање је уобичајени разлог застоја јер се блокада дешава када дамо закључавање различитим нитима, тако да би требало да дамо једно закључавање само једној нити у одређено време.Избегавајте непотребне браве:морамо избегавати браве које нису потребне.Коришћење спајања нити:Спајање нити помаже да се сачека нит док друга нит не заврши своје извршавање, тако да можемо избећи застој помоћу максималног коришћења методе придруживања.

28) Шта је Тхреад Сцхедулер у Јави?

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

Јава планер нити такође ради за одлучивање о следећем за нит:
  • Он бира приоритет нити.
  • Одређује време чекања за нит
  • Проверава природу нити

29) Да ли свака нит има свој стек у вишенитном програмирању?

Да, у вишенитном програмирању свака нит одржава сопствену или одвојену област стека у меморији због чега је свака нит независна једна од друге.


30) Како се постиже сигурност нити?

Ако метод или објекат класе може да користи више нити у исто време без икаквих услова трке, онда је класа безбедна за нити. Безбедност нити се користи да би програм био сигуран за коришћење у вишенитном програмирању. То се може постићи на следеће начине:

  • Синхронизација
  • Коришћење кључне речи Волатиле
  • Коришћење механизма заснованог на брави
  • Коришћење класа атомског омотача

31) Шта је стање расе?

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


32) Која је кључна реч волатиле у Јави?

Кључна реч Волатиле се користи у вишенитном програмирању да би се постигла безбедност нити, пошто је промена у једној променљивој променљивој видљива свим осталим нитима, тако да једна нит може да користи једну по једну променљиву.


33) Шта разумете под скупом нити?

  • Јава Тхреад поол представља групу радничких нити, које чекају да задатак буде додељен.
  • Нити у групи нити су под надзором добављача услуга који повлачи једну нит из скупа и додељује јој посао.
  • Након завршетка датог задатка, нит је поново дошла у скуп нити.
  • Величина скупа нити зависи од укупног броја нити које се чувају у резерви за извршење.

Предности скупа нити су:

  • Коришћењем скупа нити, перформансе се могу побољшати.
  • Коришћењем скупа нити може доћи до боље стабилности система.

Питања за интервјуе о паралелности

34) Које су главне компоненте АПИ-ја за конкурентност?

Цонцурренци АПИ се може развити коришћењем класе и интерфејса пакета јава.утил.Цонцуррент. У пакету јава.утил.Цонцуррент постоје следеће класе и интерфејси.

  • извршилац
  • ФаркЈоинПоол
  • ЕкецуторСервице
  • СцхедуледЕкецуторСервице
  • Будућност
  • Временска јединица (Енум)
  • ЦоунтДовнЛатцх
  • ЦицлицБарриер
  • Семафор
  • ТхреадФацтори
  • БлоцкингКуеуе
  • ДелаиКуеуе
  • Браве
  • Пхасер

35) Шта је Екецутор интерфејс у ​​Цонцурренци АПИ-ју у Јави?

Извршни интерфејс који обезбеђује пакет јава.утил.цонцуррент је једноставан интерфејс који се користи за извршавање новог задатка. Метода екецуте() Екецутор интерфејса се користи за извршавање неке задате команде. Синтакса методе екецуте() је дата испод.

воид екецуте (команда која се може покренути)

Размотрите следећи пример:

 import java.util.concurrent.Executor; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; public class TestThread { public static void main(final String[] arguments) throws InterruptedException { Executor e = Executors.newCachedThreadPool(); e.execute(new Thread()); ThreadPoolExecutor pool = (ThreadPoolExecutor)e; pool.shutdown(); } static class Thread implements Runnable { public void run() { try { Long duration = (long) (Math.random() * 5); System.out.println('Running Thread!'); TimeUnit.SECONDS.sleep(duration); System.out.println('Thread Completed'); } catch (InterruptedException ex) { ex.printStackTrace(); } } } } 

Излаз

 Running Thread! Thread Completed 

36) Шта је БлоцкингКуеуе?

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

 import java.util.Random; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; public class TestThread { public static void main(final String[] arguments) throws InterruptedException { BlockingQueue queue = new ArrayBlockingQueue(10); Insert i = new Insert(queue); Retrieve r = new Retrieve(queue); new Thread(i).start(); new Thread(r).start(); Thread.sleep(2000); } static class Insert implements Runnable { private BlockingQueue queue; public Insert(BlockingQueue queue) { this.queue = queue; } @Override public void run() { Random random = new Random(); try { int result = random.nextInt(200); Thread.sleep(1000); queue.put(result); System.out.println('Added: ' + result); result = random.nextInt(10); Thread.sleep(1000); queue.put(result); System.out.println('Added: ' + result); result = random.nextInt(50); Thread.sleep(1000); queue.put(result); System.out.println('Added: ' + result); } catch (InterruptedException e) { e.printStackTrace(); } } } static class Retrieve implements Runnable { private BlockingQueue queue; public Retrieve(BlockingQueue queue) { this.queue = queue; } @Override public void run() { try { System.out.println('Removed: ' + queue.take()); System.out.println('Removed: ' + queue.take()); System.out.println('Removed: ' + queue.take()); } catch (InterruptedException e) { e.printStackTrace(); } } } } 

Излаз

 Added: 96 Removed: 96 Added: 8 Removed: 8 Added: 5 Removed: 5 

37) Како имплементирати проблем произвођач-потрошач коришћењем БлоцкингКуеуе-а?

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

 import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; import java.util.logging.Level; import java.util.logging.Logger; public class ProducerConsumerProblem { public static void main(String args[]){ //Creating shared object BlockingQueue sharedQueue = new LinkedBlockingQueue(); //Creating Producer and Consumer Thread Thread prod = new Thread(new Producer(sharedQueue)); Thread cons = new Thread(new Consumer(sharedQueue)); //Starting producer and Consumer thread prod.start(); cons.start(); } } //Producer Class in java class Producer implements Runnable { private final BlockingQueue sharedQueue; public Producer(BlockingQueue sharedQueue) { this.sharedQueue = sharedQueue; } @Override public void run() { for(int i=0; i<10; i++){ try { system.out.println('produced: ' + i); sharedqueue.put(i); } catch (interruptedexception ex) logger.getlogger(producer.class.getname()).log(level.severe, null, ex); consumer class in java implements runnable{ private final blockingqueue sharedqueue; public (blockingqueue sharedqueue) this.sharedqueue="sharedQueue;" @override void run() while(true){ system.out.println('consumed: '+ sharedqueue.take()); logger.getlogger(consumer.class.getname()).log(level.severe, < pre> <p> <strong>Output</strong> </p> <pre> Produced: 0 Produced: 1 Produced: 2 Produced: 3 Produced: 4 Produced: 5 Produced: 6 Produced: 7 Produced: 8 Produced: 9 Consumed: 0 Consumed: 1 Consumed: 2 Consumed: 3 Consumed: 4 Consumed: 5 Consumed: 6 Consumed: 7 Consumed: 8 Consumed: 9 </pre> <hr> <h3>38) What is the difference between Java Callable interface and Runnable interface?</h3> <p>The Callable interface and Runnable interface both are used by the classes which wanted to execute with multiple threads. However, there are two main differences between the both : </p> <ul> <li>A Callable interface can return a result, whereas the Runnable interface cannot return any result.</li> <li>A Callable interface can throw a checked exception, whereas the Runnable interface cannot throw checked exception. </li> <li>A Callable interface cannot be used before the Java 5 whereas the Runnable interface can be used.</li> </ul> <hr> <h3>39) What is the Atomic action in Concurrency in Java?</h3> <ul> <li>The Atomic action is the operation which can be performed in a single unit of a task without any interference of the other operations.</li> <li>The Atomic action cannot be stopped in between the task. Once started it fill stop after the completion of the task only. </li> <li>An increment operation such as a++ does not allow an atomic action.</li> <li>All reads and writes operation for the primitive variable (except long and double) are the atomic operation.</li> <li>All reads and writes operation for the volatile variable (including long and double) are the atomic operation.</li> <li>The Atomic methods are available in java.util.Concurrent package. </li> </ul> <hr> <h3>40) What is lock interface in Concurrency API in Java?</h3> <p>The java.util.concurrent.locks.Lock interface is used as the synchronization mechanism. It works similar to the synchronized block. There are a few differences between the lock and synchronized block that are given below.</p> <ul> <li>Lock interface provides the guarantee of sequence in which the waiting thread will be given the access, whereas the synchronized block doesn&apos;t guarantee it.</li> <li>Lock interface provides the option of timeout if the lock is not granted whereas the synchronized block doesn&apos;t provide that.</li> <li>The methods of Lock interface, i.e., Lock() and Unlock() can be called in different methods whereas single synchronized block must be fully contained in a single method.</li> </ul> <hr> <h3>41) Explain the ExecutorService Interface.</h3> <p>The ExecutorService Interface is the subinterface of Executor interface and adds the features to manage the lifecycle. Consider the following example.</p> <pre> import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; public class TestThread { public static void main(final String[] arguments) throws InterruptedException { ExecutorService e = Executors.newSingleThreadExecutor(); try { e.submit(new Thread()); System.out.println(&apos;Shutdown executor&apos;); e.shutdown(); e.awaitTermination(5, TimeUnit.SECONDS); } catch (InterruptedException ex) { System.err.println(&apos;tasks interrupted&apos;); } finally { if (!e.isTerminated()) { System.err.println(&apos;cancel non-finished tasks&apos;); } e.shutdownNow(); System.out.println(&apos;shutdown finished&apos;); } } static class Task implements Runnable { public void run() { try { Long duration = (long) (Math.random() * 20); System.out.println(&apos;Running Task!&apos;); TimeUnit.SECONDS.sleep(duration); } catch (InterruptedException ex) { ex.printStackTrace(); } } } } </pre> <p> <strong>Output</strong> </p> <pre> Shutdown executor shutdown finished </pre> <hr> <h3>42) What is the difference between Synchronous programming and Asynchronous programming regarding a thread?</h3> <p> <strong>Synchronous programming: </strong> In Synchronous programming model, a thread is assigned to complete a task and hence thread started working on it, and it is only available for other tasks once it will end the assigned task.</p> <p> <strong>Asynchronous Programming: </strong> In Asynchronous programming, one job can be completed by multiple threads and hence it provides maximum usability of the various threads.</p> <hr> <h3>43) What do you understand by Callable and Future in Java?</h3> <p> <strong>Java Callable interface: </strong> In Java5 callable interface was provided by the package java.util.concurrent. It is similar to the Runnable interface but it can return a result, and it can throw an Exception. It also provides a run() method for execution of a thread. Java Callable can return any object as it uses Generic.</p> <p> <strong>Syntax:</strong> </p> <p>public interface Callable</p> <p> <strong>Java Future interface:</strong> Java Future interface gives the result of a concurrent process. The Callable interface returns the object of java.util.concurrent.Future.</p> <p>Java Future provides following methods for implementation.</p> <ul> <tr><td>cancel(boolean&#xFFFD;mayInterruptIfRunning):</td> It is used to cancel the execution of the assigned task. </tr><tr><td>get():</td> It waits for the time if execution not completed and then retrieved the result. </tr><tr><td>isCancelled():</td> It returns the Boolean value as it returns true if the task was canceled before the completion. </tr><tr><td>isDone():</td> It returns true if the job is completed successfully else returns false. </tr></ul> <hr> <h3>44. What is the difference between ScheduledExecutorService and ExecutorService interface?</h3> <p>ExecutorServcie and ScheduledExecutorService both are the interfaces of java.util.Concurrent package but scheduledExecutorService provides some additional methods to execute the Runnable and Callable tasks with the delay or every fixed time period.</p> <h3>45) Define FutureTask class in Java? </h3> <p>Java FutureTask class provides a base implementation of the Future interface. The result can only be obtained if the execution of one task is completed, and if the computation is not achieved then get method will be blocked. If the execution is completed, then it cannot be re-started and can&apos;t be canceled.</p> <p> <strong>Syntax</strong> </p> <p>public class FutureTask extends Object implements RunnableFuture</p> <hr></10;>

38) Која је разлика између Јава Цаллабле интерфејса и Руннабле интерфејса?

Интерфејс за позивање и интерфејс који се може покренути користе класе које желе да се изврше са више нити. Међутим, постоје две главне разлике између оба:

  • Интерфејс који се може позвати може да врати резултат, док интерфејс који се може покренути не може да врати никакав резултат.
  • Интерфејс који се може позвати може да избаци проверени изузетак, док интерфејс који се може покренути не може да избаци проверени изузетак.
  • Интерфејс који се може позивати се не може користити пре Јава 5, док се интерфејс који се може користити.

39) Шта је атомска акција у конкурентности у Јави?

  • Атомска акција је операција која се може извести у једној јединици задатка без икаквог мешања других операција.
  • Атомска акција се не може зауставити између задатка. Када се покрене, пуни се зауставља само након завршетка задатка.
  • Операција повећања као што је а++ не дозвољава атомску акцију.
  • Све операције читања и писања за примитивну променљиву (осим лонг и доубле) су атомске операције.
  • Све операције читања и писања за променљиву променљиву (укључујући дугу и двоструку) су атомске операције.
  • Атомске методе су доступне у пакету јава.утил.Цонцуррент.

40) Шта је интерфејс за закључавање у Цонцурренци АПИ-ју у Јави?

Интерфејс јава.утил.цонцуррент.лоцкс.Лоцк се користи као механизам за синхронизацију. Ради слично синхронизованом блоку. Постоји неколико разлика између закључаног и синхронизованог блока које су наведене у наставку.

  • Интерфејс закључавања обезбеђује гаранцију секвенце у којој ће нити која чека добити приступ, док синхронизовани блок то не гарантује.
  • Интерфејс закључавања пружа опцију временског ограничења ако закључавање није одобрено, док синхронизовани блок то не пружа.
  • Методе интерфејса закључавања, тј. Лоцк() и Унлоцк() могу се позвати у различитим методама, док један синхронизовани блок мора бити у потпуности садржан у једној методи.

41) Објасните ЕкецуторСервице интерфејс.

ЕкецуторСервице Интерфаце је подинтерфејс Екецутор интерфејса и додаје функције за управљање животним циклусом. Размотрите следећи пример.

 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; public class TestThread { public static void main(final String[] arguments) throws InterruptedException { ExecutorService e = Executors.newSingleThreadExecutor(); try { e.submit(new Thread()); System.out.println(&apos;Shutdown executor&apos;); e.shutdown(); e.awaitTermination(5, TimeUnit.SECONDS); } catch (InterruptedException ex) { System.err.println(&apos;tasks interrupted&apos;); } finally { if (!e.isTerminated()) { System.err.println(&apos;cancel non-finished tasks&apos;); } e.shutdownNow(); System.out.println(&apos;shutdown finished&apos;); } } static class Task implements Runnable { public void run() { try { Long duration = (long) (Math.random() * 20); System.out.println(&apos;Running Task!&apos;); TimeUnit.SECONDS.sleep(duration); } catch (InterruptedException ex) { ex.printStackTrace(); } } } } 

Излаз

 Shutdown executor shutdown finished 

42) Која је разлика између синхроног програмирања и асинхроног програмирања у погледу нити?

Синхроно програмирање: У моделу синхроног програмирања, нит се додељује да заврши задатак и стога је нит почела да ради на њој, а за друге задатке је доступна само када заврши додељени задатак.

Асинхроно програмирање: У асинхроном програмирању, један посао се може завршити са више нити и стога пружа максималну употребљивост различитих нити.


43) Шта разумете под Цаллабле и Футуре у Јави?

Јава Цаллабле интерфејс: У Јава5 позивни интерфејс је обезбеђен пакетом јава.утил.цонцуррент. Сличан је интерфејсу Руннабле, али може да врати резултат и може да избаци изузетак. Такође обезбеђује метод рун() за извршавање нити. Јава Цаллабле може да врати било који објекат пошто користи Генериц.

Синтакса:

јавни интерфејс Позив

Јава Футуре интерфејс: Јава Футуре интерфејс даје резултат истовременог процеса. Интерфејс за позивање враћа објекат јава.утил.цонцуррент.Футуре.

Јава Футуре пружа следеће методе за имплементацију.

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

44. Која је разлика између СцхедуледЕкецуторСервице и ЕкецуторСервице интерфејса?

ЕкецуторСервцие и СцхедуледЕкецуторСервице су интерфејси пакета јава.утил.Цонцуррент, али сцхедуледЕкецуторСервице пружа неке додатне методе за извршавање задатака који се могу покренути и које се могу позивати са одлагањем или сваким фиксним временским периодом.

45) Дефинисати класу ФутуреТаск у Јави?

Јава ФутуреТаск класа обезбеђује основну имплементацију Футуре интерфејса. Резултат се може добити само ако је извршење једног задатка завршено, а ако прорачун није постигнут онда ће гет метода бити блокирана. Ако је извршење завршено, онда се не може поново покренути и не може се отказати.

Синтакса

јавна класа ФутуреТаск ектендс Објецт имплементира РуннаблеФутуре