logo

Vprašanja za intervju o večnitnosti in sočasnosti Java

Večnitnost in sinhronizacija veljata za tipično poglavje v programiranju java. V podjetjih, ki razvijajo igre, se večinoma postavljajo vprašanja na intervjujih, povezana z večnitnostjo. Spodaj je naveden seznam pogosto zastavljenih vprašanj o intervjuju za večnitnost in sočasnost java.


Vprašanja za intervju z večnitnostjo

1) Kaj je večnitnost?

Večnitnost je postopek izvajanja več niti hkrati. Večnitnost se uporablja za doseganje večopravilnosti. Porabi manj pomnilnika in zagotavlja hitro in učinkovito delovanje. Njegove glavne prednosti so:

  • Niti si delijo isti naslovni prostor.
  • Nit je lahka.
  • Stroški komunikacije med procesi so nizki.
Več podrobnosti.

2) Kaj je nit?

Nit je lahek podproces. To je ločena pot izvajanja, ker vsaka nit teče v drugem okviru sklada. Proces lahko vsebuje več niti. Niti si delijo procesne vire, vendar se še vedno izvajajo neodvisno.

Več podrobnosti.

3) Razlikovati med procesom in nitjo?

Obstajajo naslednje razlike med procesom in nitjo.

  • Program v izvajanju se imenuje proces, medtem ko; Nit je podmnožica procesa
  • Procesi so neodvisni, medtem ko so niti podskupina procesa.
  • Procesi imajo drugačen naslovni prostor v pomnilniku, medtem ko niti vsebujejo skupni naslovni prostor.
  • Preklapljanje konteksta je med nitmi hitrejše v primerjavi s procesi.
  • Komunikacija med procesi je počasnejša in dražja od komunikacije med nitmi.
  • Kakršna koli sprememba v nadrejenem procesu ne vpliva na podrejeni proces, medtem ko lahko spremembe v nadrejeni niti vplivajo na podrejeno nit.

4) Kaj razumete pod komunikacijo med nitmi?

  • Proces komunikacije med sinhroniziranimi nitmi se imenuje komunikacija med nitmi.
  • Komunikacija med nitmi se uporablja za izogibanje anketiranju niti v Javi.
  • Nit je začasno zaustavljena pri izvajanju v svojem kritičnem odseku, drugi niti pa je dovoljen vstop (ali zaklepanje) v isti kritični odsek, da se izvede.
  • Pridobite ga lahko z metodami wait(), notify() in notifyAll().

5) Kakšen je namen metode wait() v Javi?

Metoda wait() je na voljo v razredu Object v Javi. Ta metoda se uporablja za komunikacijo med nitmi v Javi. java.lang.Object.wait() se uporablja za zaustavitev trenutne niti in čakanje, da druga nit ne pokliče metode notify() ali notifyAll(). Njegova sintaksa je podana spodaj.

javno končno prazno čakanje()


6) Zakaj je treba metodo wait() poklicati iz sinhroniziranega bloka?

Poklicati moramo metodo čakanja, sicer bo vrgla java.lang.IllegalMonitorStateException izjema. Poleg tega potrebujemo metodo wait() za komunikacijo med nitmi z notify() in notifyAll(). Zato mora biti prisoten v sinhroniziranem bloku za pravilno in pravilno komunikacijo.


7) Kakšne so prednosti večnitnosti?

Večnitno programiranje ima naslednje prednosti:

  • Večnitnost omogoča, da je aplikacija/program vedno odziven na vnos, tudi če se že izvaja z nekaterimi opravili v ozadju
  • Večnitnost omogoča hitrejše izvajanje nalog, saj se niti izvajajo neodvisno.
  • Večnitnost zagotavlja boljšo uporabo predpomnilnika, saj si niti delijo skupne pomnilniške vire.
  • Večnitnost zmanjša število zahtevanih strežnikov, saj lahko en strežnik izvaja več niti hkrati.

8) Kakšna so stanja v življenjskem ciklu niti?

Nit ima lahko med svojo življenjsko dobo eno od naslednjih stanj:

    Novo:V tem stanju je objekt razreda Thread ustvarjen z uporabo novega operatorja, vendar nit ni živa. Nit se ne zažene, dokler ne pokličemo metode start().Izvedljivo:V tem stanju je nit pripravljena za izvajanje po klicu metode start(). Vendar razporejevalnik niti še ni izbral niti.Teče:V tem stanju razporejevalnik niti izbere nit iz stanja pripravljenosti in nit se izvaja.Čakanje/blokirano:V tem stanju se nit ne izvaja, vendar je še vedno živa, ali pa čaka, da se druga nit konča.Mrtev/prekinjeno:Nit je v zaključenem ali mrtvem stanju, ko zapusti metodo run().

9) Kakšna je razlika med vnaprejšnjim razporejanjem in časovnim razrezom?

Pri vnaprejšnjem razporejanju se naloga z najvišjo prioriteto izvaja, dokler ne preide v stanje čakanja ali mrtvega stanja ali dokler ne pride do naloge z višjo prioriteto. Pri časovnem razrezu se opravilo izvaja vnaprej določen čas in nato znova vstopi v skupino pripravljenih opravil. Razporejevalnik nato na podlagi prioritete in drugih dejavnikov določi, katera naloga naj se izvede naslednja.


10) Kaj je preklapljanje konteksta?

Pri preklopu konteksta je stanje procesa (ali niti) shranjeno, tako da ga je mogoče obnoviti in izvajanje pozneje nadaljevati z iste točke. Kontekstno preklapljanje omogoča, da si več procesov deli isti CPE.


11) Razlikujete med razredom Thread in vmesnikom Runnable za ustvarjanje niti?

Nit lahko ustvarite na dva načina.

  • Z razširitvijo razreda Thread
  • Z implementacijo vmesnika Runnable

Vendar pa so glavne razlike med obema načinoma navedene spodaj:

  • Z razširitvijo razreda Thread ne moremo razširiti nobenega drugega razreda, saj Java med izvajanjem vmesnika Runnable ne dovoljuje večkratnega dedovanja; lahko razširimo tudi druge osnovne razrede (če je potrebno).
  • Z razširitvijo razreda Thread vsaka nit ustvari edinstven objekt in se z njim poveže med izvajanjem vmesnika Runnable; več niti si deli isti objekt
  • Razred Thread ponuja različne vgrajene metode, kot so getPriority(), isAlive in številne druge, medtem ko vmesnik Runnable ponuja eno samo metodo, tj. run().

12) Kaj pomeni metoda join()?

Metoda join() čaka, da nit umre. Z drugimi besedami, povzroči, da se trenutno delujoče niti prenehajo izvajati, dokler nit, ki se ji pridruži, ne dokonča svoje naloge. Metoda Join je v razredu Thread preobremenjena na naslednje načine.

  • public void join() vrže InterruptedException
  • public void join (dolge milisekunde) vrže InterruptedException
Več podrobnosti.

13) Opišite namen in delovanje metode sleep().

Metoda sleep() v Javi se uporablja za blokiranje niti za določen čas, kar pomeni, da zaustavi izvajanje niti za določen čas. Obstajata dva načina za to.

Sintaksa:

kako najdem skrite aplikacije na androidu
  • javni statični void spanje (dolge milisekunde) vrže InterruptedException
  • javni statični void spanje (dolge milisekunde, int nano) vrže InterruptedException

Delovanje metode sleep().

Ko pokličemo metodo sleep(), za določen čas zaustavi izvajanje trenutne niti in da prednost drugi niti (če je na voljo). Poleg tega, ko se čakalni čas zaključi, prejšnja nit ponovno spremeni svoje stanje iz čakanja v možnost izvajanja in pride v stanje izvajanja, in celoten proces deluje tako naprej, dokler se izvedba ne zaključi.


14) Kakšna je razlika med metodo wait() in sleep()?

počakaj()spati()
1) Metoda wait() je definirana v razredu Object.Metoda sleep() je definirana v razredu Thread.
2) Metoda wait() sprosti zaklep.Metoda sleep() ne sprosti zaklepanja.

15) Ali je mogoče nit začeti dvakrat?

Ne, niti ne moremo znova zagnati, saj ko se nit zažene in izvede, preide v stanje mrtvo. Če poskušamo nit zagnati dvakrat, bo to povzročilo runtimeException 'java.lang.IllegalThreadStateException'. Razmislite o naslednjem primeru.

 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(); } } 

Izhod

 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) 
Več podrobnosti.

16) Ali lahko pokličemo metodo run() namesto start()?

Da, neposredno klicanje metode run() je veljavno, vendar ne bo delovala kot nit, ampak bo delovala kot običajen objekt. Med nitmi ne bo preklapljanja konteksta. Ko pokličemo metodo start(), interno pokliče metodo run(), ki ustvari nov sklad za nit, medtem ko neposredni klic run() ne bo ustvaril novega sklada.

Več podrobnosti.

17) Kaj pa demonske niti?

Demonske niti so niti z nizko prioriteto, ki uporabniškim nitim zagotavljajo podporo in storitve v ozadju. Daemon nit samodejno prekine JVM, če program ostane samo z demonsko nitjo, vse druge uporabniške niti pa so končane/umrle. V razredu Thread sta na voljo dve metodi za demonsko nit:

    public void setDaemon(boolean status):Uporablja se za označevanje demonske niti ali uporabniške niti.javni logični isDaemon():Preveri, ali je nit demon ali ne.
Več podrobnosti.

18) Ali lahko uporabniško nit naredimo kot demonsko nit, če je nit zagnana?

Ne, če to storite, bo vrglo IllegalThreadStateException. Zato lahko pred zagonom niti ustvarimo demonsko nit.

 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. } } 

Izhod

 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) 
Več podrobnosti.

19)Kaj je kavelj za zaustavitev?

Kavelj za zaustavitev je nit, ki se implicitno prikliče, preden se JVM zaustavi. Tako ga lahko uporabimo za čiščenje vira ali shranjevanje stanja, ko se JVM normalno ali nenadoma zaustavi. Kavelj za zaustavitev lahko dodamo z naslednjo metodo:

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

Nekatere pomembne točke o kavljih za zaustavitev so:

  • Kavlji za zaustavitev so inicializirani, vendar jih je mogoče zagnati šele, ko je prišlo do zaustavitve JVM.
  • Kavlji za zaustavitev so bolj zanesljivi kot finalizer(), ker obstaja zelo manj možnosti, da se kavlji za zaustavitev ne zaženejo.
  • Kavelj zaustavitve je mogoče ustaviti s klicem metode halt(int) razreda Runtime.
Več podrobnosti.

20) Kdaj naj prekinemo nit?

Nit bi morali prekiniti, ko želimo prekiniti stanje spanja ali čakanja niti. Nit lahko prekinemo s klicem interrupt()�, ki vrže InterruptedException.

Več podrobnosti.

21) Kaj je sinhronizacija?

Sinhronizacija je zmožnost nadzora dostopa več niti do katerega koli vira v skupni rabi. Uporablja se:


  1. Da preprečite motnje niti.
  2. Da preprečite težave z doslednostjo.

Ko več niti poskuša opraviti isto nalogo, obstaja možnost napačnega rezultata, zato za odpravo te težave Java uporablja postopek sinhronizacije, ki dovoljuje izvajanje samo ene niti naenkrat. Sinhronizacijo je mogoče doseči na tri načine:

datum na niz
  • po sinhronizirani metodi
  • s sinhroniziranim blokom
  • s statično sinhronizacijo

Sintaksa za sinhroniziran blok

 synchronized(object reference expression) { //code block } 
Več podrobnosti.

22) Kaj je namen sinhroniziranega bloka?

Sinhronizirani blok je mogoče uporabiti za izvedbo sinhronizacije katerega koli specifičnega vira metode. Samo ena nit naenkrat se lahko izvaja na določenem viru, vse druge niti, ki poskušajo vstopiti v sinhronizirani blok, pa so blokirane.

  • Sinhronizirani blok se uporablja za zaklepanje predmeta za kateri koli vir v skupni rabi.
  • Obseg sinhroniziranega bloka je omejen na blok, na katerem je uporabljen. Njegov obseg je manjši od metode.
Več podrobnosti.

23) Ali je mogoče predmet Java zakleniti za izključno uporabo s strani določene niti?

ja Predmet lahko zaklenete tako, da ga postavite v 'sinhroniziran' blok. Zaklenjeni objekt ni dostopen nobeni niti, razen tisti, ki ga je izrecno zahtevala.


24) Kaj je statična sinhronizacija?

Če katero koli statično metodo naredite kot sinhronizirano, bo zaklepanje na razredu in ne na objektu. Če uporabimo ključno besedo synchronized pred metodo, bo zaklenila objekt (ena nit lahko dostopa do predmeta naenkrat), če pa uporabimo statično synchronized, bo zaklenila razred (ena nit lahko dostopa do razreda naenkrat). Več podrobnosti.


25) Kakšna je razlika med notify() in notifyAll()?

Notify() se uporablja za odblokiranje ene čakajoče niti, medtem ko se metoda notifyAll() uporablja za odblokiranje vseh niti v stanju čakanja.


26)Kaj je zastoj?

Zastoj je situacija, v kateri vsaka nit čaka na vir, ki ga ima druga čakajoča nit. V tem primeru se nobena nit ne izvede niti ne dobi možnosti za izvedbo. Namesto tega med vsemi nitmi obstaja univerzalno čakalno stanje. Zastoj je zelo zapletena situacija, ki lahko prekine našo kodo med izvajanjem.

Več podrobnosti.

27) Kako zaznati stanje zastoja? Kako se ji je mogoče izogniti?

Stanje zastoja lahko odkrijemo tako, da zaženemo kodo na cmd in zberemo izpis niti, in če je v kodi prisoten zastoj, se na cmd prikaže sporočilo.

Načini, kako se izogniti stanju zastoja v Javi:

    Izogibajte se ugnezdeni ključavnici:Ugnezdeno zaklepanje je pogost razlog za zastoj, saj do zastoja pride, ko zagotovimo zaklepanje za različne niti, tako da bi morali dati eno zaklepanje samo eni niti ob določenem času.Izogibajte se nepotrebnim zaklepom:izogibati se moramo ključavnicam, ki niso potrebne.Uporaba združevanja niti:Združevanje niti pomaga počakati na nit, dokler druga nit ne zaključi svoje izvedbe, tako da se lahko izognemo zastoju z največjo uporabo metode pridružitve.

28) Kaj je razporejevalnik niti v Javi?

V Javi, ko ustvarimo niti, so le-te nadzorovane s pomočjo Thread Schedulerja, ki je del JVM. Razporejevalnik niti je odgovoren le za odločanje, katera nit naj se izvede. Razporejevalnik niti uporablja dva mehanizma za razporejanje niti: Preemptive in Time Slicing.

Razporejevalnik niti Java deluje tudi za odločanje o naslednjem za nit:
  • Izbere prioriteto niti.
  • Določa čakalni čas za nit
  • Preveri naravo niti

29) Ali ima vsaka nit svoj sklad v večnitnem programiranju?

Da, pri večnitnem programiranju vsaka nit vzdržuje svoje lastno ali ločeno območje sklada v pomnilniku, zaradi česar je vsaka nit neodvisna ena od druge.


30) Kako se doseže varnost niti?

Če lahko metodo ali objekt razreda uporablja več niti hkrati brez kakršnih koli pogojev tekmovanja, potem je razred varen za niti. Varnost niti se uporablja za varno uporabo programa v večnitnem programiranju. To je mogoče doseči na naslednje načine:

  • Sinhronizacija
  • Uporaba ključne besede Volatile
  • Uporaba mehanizma na osnovi ključavnice
  • Uporaba atomskih ovojnih razredov

31) Kaj je tekmovalno stanje?

Stanje tekmovanja je težava, ki se pojavi pri večnitnem programiranju, ko se različne niti izvajajo istočasno in istočasno dostopajo do skupnega vira. Pravilna uporaba sinhronizacije se lahko izogne ​​stanju Race.


32) Kaj je volatile ključna beseda v Javi?

Ključna beseda volatile se uporablja v večnitnem programiranju za doseganje varnosti niti, saj je sprememba ene volatile spremenljivke vidna vsem drugim nitim, tako da lahko eno spremenljivko uporablja ena nit naenkrat.

delni derivat v lateksu

33) Kaj razumete pod bazenom niti?

  • Java Thread pool predstavlja skupino delovnih niti, ki čakajo na dodelitev naloge.
  • Niti v naboru niti nadzoruje ponudnik storitev, ki potegne eno nit iz nabora in ji dodeli opravilo.
  • Po zaključku dane naloge je nit spet prišla v področje niti.
  • Velikost nabora niti je odvisna od skupnega števila niti, ki so v rezervi za izvajanje.

Prednosti bazena niti so:

  • Z uporabo skupine niti je mogoče izboljšati zmogljivost.
  • Z uporabo področja niti lahko pride do boljše stabilnosti sistema.

Vprašanja za sočasni intervju

34) Katere so glavne komponente API-ja za sočasnost?

API za sočasnost je mogoče razviti z uporabo razreda in vmesnikov paketa java.util.Concurrent. V paketu java.util.Concurrent so naslednji razredi in vmesniki.

  • Izvršitelj
  • FarkJoinPool
  • ExecutorService
  • ScheduledExecutorService
  • Prihodnost
  • TimeUnit(Enum)
  • CountDownLatch
  • CyclicBarrier
  • Semafor
  • ThreadFactory
  • BlockingQueue
  • DelayQueue
  • Ključavnice
  • Phaser

35) Kaj je vmesnik Executor v API-ju Concurrency v Javi?

Vmesnik izvajalca, ki ga ponuja paket java.util.concurrent, je preprost vmesnik, ki se uporablja za izvajanje nove naloge. Metoda execute() vmesnika Executor se uporablja za izvedbo določenega ukaza. Sintaksa metode execute() je podana spodaj.

void izvrši (izvedljiv ukaz)

Razmislite o naslednjem primeru:

 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(); } } } } 

Izhod

 Running Thread! Thread Completed 

36) Kaj je BlockingQueue?

java.util.concurrent.BlockingQueue je podvmesnik čakalne vrste, ki podpira operacije, kot je čakanje na razpoložljivost prostora pred vstavljanjem nove vrednosti ali čakanje, da čakalna vrsta postane neprazna, preden se iz nje pridobi element. Razmislite o naslednjem primeru.

 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(); } } } } 

Izhod

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

37) Kako implementirati problem proizvajalec-potrošnik z uporabo BlockingQueue?

Problem proizvajalec-potrošnik je mogoče rešiti z uporabo BlockingQueue na naslednji način.

 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) Kakšna je razlika med Java Callable vmesnikom in Runnable vmesnikom?

Oba vmesnika Callable in Runnable uporabljajo razredi, ki so želeli izvajati z več nitmi. Vendar pa obstajata dve glavni razliki med obema:

  • Vmesnik Callable lahko vrne rezultat, medtem ko vmesnik Runnable ne more vrniti nobenega rezultata.
  • Vmesnik Callable lahko vrže preverjeno izjemo, medtem ko vmesnik Runnable ne more vrniti preverjene izjeme.
  • Vmesnika Callable ni mogoče uporabiti pred Javo 5, medtem ko je mogoče uporabiti vmesnik Runnable.

39) Kaj je atomsko dejanje v Concurrency v Javi?

  • Atomsko dejanje je operacija, ki jo je mogoče izvesti v eni sami enoti opravila brez kakršnih koli motenj drugih operacij.
  • Dejanja Atomic ni mogoče ustaviti med opravilom. Ko se enkrat zažene, se polni ustavi šele po zaključku naloge.
  • Operacija povečanja, kot je a++, ne dovoljuje atomskega dejanja.
  • Vse operacije branja in pisanja za primitivno spremenljivko (razen long in double) so atomske operacije.
  • Vse operacije branja in pisanja za volatile spremenljivko (vključno z dolgo in dvojno) so atomske operacije.
  • Metode Atomic so na voljo v paketu java.util.Concurrent.

40) Kaj je vmesnik za zaklepanje v API-ju za sočasnost v Javi?

Vmesnik java.util.concurrent.locks.Lock se uporablja kot sinhronizacijski mehanizem. Deluje podobno kot sinhronizirani blok. Med ključavnico in sinhroniziranim blokom je nekaj razlik, ki so navedene spodaj.

  • Vmesnik zaklepanja zagotavlja zaporedje, v katerem bo čakalna nit dobila dostop, medtem ko sinhronizirani blok tega ne zagotavlja.
  • Vmesnik zaklepanja ponuja možnost časovne omejitve, če zaklepanje ni odobreno, medtem ko sinhronizirani blok tega ne omogoča.
  • Metode vmesnika Lock, tj. Lock() in Unlock(), je mogoče poklicati v različnih metodah, medtem ko mora biti en sam sinhroniziran blok v celoti vsebovan v eni metodi.

41) Razložite vmesnik ExecutorService.

Vmesnik ExecutorService je podvmesnik vmesnika Executor in dodaja funkcije za upravljanje življenjskega cikla. Razmislite o naslednjem primeru.

indijska igralka rani mukerji
 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(); } } } } 

Izhod

 Shutdown executor shutdown finished 

42) Kakšna je razlika med sinhronim programiranjem in asinhronim programiranjem glede niti?

Sinhrono programiranje: V modelu sinhronega programiranja je nit dodeljena za dokončanje naloge in je zato nit začela delati na njej, za druge naloge pa je na voljo šele, ko bo končala dodeljeno nalogo.

Asinhrono programiranje: Pri asinhronem programiranju lahko eno opravilo opravi več niti, kar zagotavlja največjo uporabnost različnih niti.


43) Kaj razumete pod pojmoma Callable in Future v Javi?

Java Callable vmesnik: V Java5 klicni vmesnik je zagotovil paket java.util.concurrent. Podoben je vmesniku Runnable, vendar lahko vrne rezultat in povzroči izjemo. Zagotavlja tudi metodo run() za izvajanje niti. Java Callable lahko vrne kateri koli predmet, saj uporablja Generic.

Sintaksa:

javni vmesnik, ki ga je mogoče klicati

Java Future vmesnik: Vmesnik Java Future daje rezultat sočasnega procesa. Vmesnik Callable vrne objekt java.util.concurrent.Future.

Java Future ponuja naslednje metode za implementacijo.

    prekliči(boolean�mayInterruptIfRunning):Uporablja se za preklic izvajanja dodeljene naloge.pridobi():Počaka na čas, če izvedba ni končana, in nato pridobi rezultat.isCancelled():Vrne logično vrednost, saj vrne true, če je bilo opravilo preklicano pred zaključkom.je narejeno():Vrne true, če je opravilo uspešno zaključeno, sicer vrne false.

44. Kakšna je razlika med vmesnikoma ScheduledExecutorService in ExecutorService?

ExecutorServcie in ScheduledExecutorService sta vmesnika paketa java.util.Concurrent, vendar scheduledExecutorService ponuja nekaj dodatnih metod za izvajanje opravil Runnable in Callable z zamikom ali v vsakem določenem časovnem obdobju.

45) Definirajte razred FutureTask v Javi?

Razred Java FutureTask zagotavlja osnovno izvedbo vmesnika Future. Rezultat je mogoče doseči le, če je izvedba ene naloge končana, in če izračun ni dosežen, bo metoda get blokirana. Če je izvedba končana, je ni mogoče znova zagnati in je ni mogoče preklicati.

Sintaksa

javni razred FutureTask extends Object izvaja RunnableFuture