Top 40 de întrebări și răspunsuri la interviu multithreading (2025)

Cele mai bune întrebări despre interviu Java Multithreading

Iată întrebările și răspunsurile la interviu Multithreading Interview Questions pentru cei nou-veniți, precum și pentru candidații cu experiență pentru a-și obține jobul visat.


1) Ce este un Thread?

Un Thread este o unitate concurentă de execuție. Putem spune că face parte din proces care poate rula cu ușurință concomitent cu alte părți ale procesului.

Descărcare gratuită PDF: Întrebări și răspunsuri la interviu multithreading


2) Ce este multithreading-ul?

multithreading în Java este un proces de executare a două sau mai multe fire de execuție simultan pentru utilizarea maximă a procesorului.

Principalul avantaj este:

  • Threadurile au același spațiu de adrese
  • Firul rămâne ușor
  • Costul de comunicare între fire este scăzut.

3) Care sunt stările asociate firului?

  • Gata
  • Alergare
  • Aşteptare
  • Stare moartă

4) Discutați despre ciclul de viață al firului?

Ciclul de viață al unui fir este similar cu ciclul de viață al proceselor care rulează într-un sistem de operare. În timpul ciclului său de viață, firul se poate muta de la o stare la alta. Totuși, depinde de operația efectuată asupra acestuia.


5) Care sunt stările firului?

Următoarele sunt diferitele stări ale firului:

Nou: Un fir care tocmai este instanțiat este în stare nouă. Când este invocată o metodă start(), firul de execuție devine starea gata. Apoi este mutat în starea rulabilă de către planificatorul de fire.

  • Rugabil: Un fir care este gata de rulare
  • Alergare: Un fir care se execută este în stare de rulare.
  • Blocat: Un fir blocat așteaptă o blocare a monitorului în această stare. Acest lucru se poate întâmpla și atunci când un fir realizează o operație I/O și trece la următoarea stare.
  • Aşteptare: Este un thread care așteaptă ca un alt thread să facă acțiunea specifică.
  • Timed_waiting: Este un thread care așteaptă să funcționeze un alt thread.
  • Terminat: Un fir care a ieșit este în această stare.
Întrebări de interviu multithreading
Întrebări de interviu multithreading

6) Care sunt diferențele majore dintre Thread și Process?

Firul este un subset al procesului. Procesul poate conține mai multe fire. Procesul poate rula pe spațiu de memorie diferit, dar toate firele de execuție au același spațiu de memorie.


7) Ce este blocajul?

Deadlock este o situație în care un fir de execuție așteaptă o blocare a obiectului, care este dobândită de un alt fir de execuție, iar al doilea fir de execuție așteaptă, de asemenea, o blocare a obiectului, care este dobândită de primul fir de execuție. Deoarece ambele fire se așteaptă unul pe celălalt să elibereze, această condiție se numește blocaj.


8) Ce este LiveLock?

Livelock apare atunci când toate firele de execuție sunt blocate și nu se pot executa din cauza indisponibilității resurselor necesare și a inexistenței unui fir de execuție deblocat.

Livelock poate apărea în următoarele condiții:

  • Când toate firele dintr-un program sunt executate pe un obiect cu parametri zero. Programul este blocat în direct și nu este niciodată procesat până când unul sau mai multe fire nu apelează Object.notify () sau Object.notifyAll() pe obiectele relevante.
  • Livelock se întâmplă și atunci când toate firele dintr-un program sunt blocate în bucle infinite.
Întrebări de interviu multithreading
multithreading

9) Ce este un monitor?

  • Monitorul este un corp de cod care poate fi executat de un singur fir la un moment dat.
  • Dacă orice alt fir încearcă să obțină acces în același timp, acesta va fi suspendat până când firul curent eliberează Monitorul.

10) Ce înțelegi prin înfometarea firelor?

În situația în care un fir de execuție nu are CPU suficient pentru execuția sa, se întâmplă înfometarea firului de execuție.

Cu toate acestea, se poate întâmpla în următoarele scenarii

  • Firele cu prioritate scăzută vor primi mai puțin CPU în comparație cu firele cu prioritate ridicată. Firul cu prioritate inferioară poate muri de foame așteptând să obțină mai mult spațiu pe CPU pentru a efectua calcule.
  • Firul de execuție poate aștepta la nesfârșit o blocare pe monitorul obiectului, dar notify() poate trezi în mod repetat alte fire. În acest caz, firul moare de foame.

11) Care este semnificația busy spin în multi-threading?

Busy spin este o tehnică pe care programatorii concurenți o folosesc pentru a face un fir să aștepte în anumite condiții. Acest lucru este destul de diferit de metodele tradiționale precum wait() și sleep(), care toate implică renunțarea la controlul CPU. Această metodă nu necesită abandonarea procesorului, ci doar rulează bucla goală.


12) Ce este schimbarea contextului în multi-threading?

Este procesul de stocare și restaurare a stării CPU. Acest lucru ajută la relua executia firului de executie din acelasi punct intr-un moment ulterior in timp. Este una dintre caracteristicile esențiale pentru sistemul de operare multitasking și suport pentru mediul multi-threaded.


13) De ce comportamentul Thread-ului este imprevizibil?

Putem spune că comportamentul thread-urilor este imprevizibil deoarece execuția Threads depinde de Thread scheduler. Ar trebui să ne amintim că fiecare planificator de fire are o implementare diferită pe diferite platforme precum Windows, Unix etc.


14) Cum poți întrerupe execuția unui Thread pentru o anumită perioadă de timp?

metoda sleep () este utilizată pentru a întrerupe execuția firului de execuție pentru o anumită perioadă de timp. Cu toate acestea, acest lucru nu va opri procesarea firului pentru un anumit timp. Cu toate acestea, atunci când firul de execuție se trezește din starea de repaus, starea sa se schimbă în rulabil și pe baza programării firului de execuție, acesta va fi executat.


15) Care sunt numeroasele moduri prin care un fir poate intra în starea de așteptare?

Un fir poate intra în starea de așteptare prin următoarele moduri

  • Folosind metoda sleep().
  • Blocare pe I/O
  • Încercarea fără succes de a obține blocarea unui obiect
  • Prin invocarea metodei wait() a unui obiect

16) Ce se întâmplă dacă nu înlocuim o metodă de rulare?

În Java, când apelăm metoda start() pe un fir, apelează intern metoda run() cu fir nou creat. Deci, dacă nu înlocuim metoda run( ), atunci firul nou creat nu va fi apelat, așa că nu se va întâmpla nimic.
Exemplu:

class MyThread extends Thread {

//don't override run() method

}
public class DontOverrideRun {

public static void main(String[] args) {

System.out.println("main has started.");

MyThread thread1=new MyThread();

thread1.start();

System.out.println("main has ended.");
}

}

17) Care este diferența majoră dintre metoda Thread.start() și Thread?run()?

Metoda Thread.start() (metoda nativă) a clasei Thread are rolul de a rula metoda Thread.A run() într-un fir. Deci, dacă apelăm direct Thread. Metoda run() se execută și în același fir. Astfel, nu va rezolva niciodată scopul creării unui nou thread.


18) Cum se creează un fir în java?

Există două metode de a crea un fir în java.

  • Mai întâi prin implementarea interfeței Runnable și apoi creați un obiect thread din aceasta.
  • A doua metodă este extinderea clasei thread.

19) Care este sensul Thread Priority?

Fiecare fir are o prioritate. Cu toate acestea, o prioritate mai mare primește și prioritate în execuție. Totuși, depinde și de implementarea Thread Scheduler, care depinde de sistemul de operare. Este posibil să se schimbe prioritatea firului de execuție, dar nu oferă siguranța că thread-ul cu prioritate mai mare va fi executat primul.


20) Ce face metoda join()?

Metoda join() așteaptă ca un fir să dispară. Forțează toate firele de execuție care rulează să se oprească până în momentul în care firul de execuție se alătură pentru a-și finaliza munca.


21) Ce este Java Shutdown Hook?

Cârligul de închidere Java este utilizat pentru a curăța resursele când JVM se închide. Resursele curate înseamnă închiderea fișierului jurnal, trimiterea unor alerte sau altceva. Cârligul de închidere trebuie utilizat pentru a executa codul înainte ca JVM să se închidă.


22) Care sunt cele două utilizări principale ale volatilului în Java?

Firele au voie să păstreze valorile variabilelor în memoria locală Dacă o variabilă este marcată ca volatilă, atunci de fiecare dată când este utilizată aceeași variabilă, aceasta trebuie citită din memoria principală.

În același mod, de fiecare dată când este scrisă variabila, valoarea trebuie să fie stocată în memoria principală.


23) Cum puteți partaja date între două fire în Java?

Putem obține date între fire folosind un obiect partajat sau concurent structură de date cum ar fi BlockingQueue. Implementează un model producător-consumator folosind metode de așteptare și notificări. De asemenea, implică partajarea obiectelor între două fire.


24) Cum pot fi controlate mai multe fire simultan?

Firele multiple pot fi controlate simultan dacă sunt create într-un obiect ThreadGroup.


25) Ce este o metodă de blocare în Java?

În Java, metoda de blocare este o metodă care blochează până când sarcina este finalizată. De exemplu, acceptați metoda () a blocurilor ServerSocket până în momentul în care un client este conectat. Aici, blocarea se referă la orice control nu va reveni la apelant până când sarcina se termină.


26) Care este principala diferență dintre metoda așteptare () și somn ()?

Aștepta() Dormi()
Această metodă este definită în clasa Object Metoda este definită în clasa Thread
Metoda Wait() eliberează blocarea Această metodă nu eliberează niciodată blocarea.

27) Ce este un obiect imuabil? Cum poate ajuta la scrierea unei cereri concurente?

Orice obiect poate fi considerat de necontestat dacă starea lui nu se schimbă după ce este construit. Obiectele imuabile sunt folosite pentru a crea aplicații simple, fiabile și concurente.

Pentru a crea obiecte imuabile, este important să faceți clasa și membrul său final, astfel încât odată ce obiectele sunt create, starea sa nu se modifică.


28) Spune-mi diferența dintre a ceda și a dormi?

Când o sarcină își invocă metoda yield(), aceasta revine la starea gata.

Când o sarcină își invocă metoda sleep(), revine la starea de așteptare.


29) Ce este ThreadPool?

ThreadPool este un grup de fire care reutiliza un număr fix de fire pentru a executa sarcina specifică.


30) La ce folosește cuvântul cheie Synchronized?

Cuvântul cheie sincronizat poate fi aplicat fie metodei statice, fie nestatice. Folosind Synchronized, un singur fir poate accesa metodele sincronizate. Cu toate acestea, în situația în care există mai multe fire care încearcă să acceseze aceeași metodă. În acel moment, alte fire trebuie să aștepte firul de execuție. De asemenea, oferă o blocare a obiectului pentru a preveni o condiție de cursă.

public void synchronized method1(){}

public void synchronized staticmethod1(){}

public void myMethod(){

synchronized (this){

//synchronized keyword on block of code

}

}

31) Ce este un cuvânt cheie volatil?

Cuvântul cheie volatil este un calificator care este aplicat unei variabile atunci când este declarată. Îi spune compilatorului că valoarea variabilei se poate schimba în orice moment, fără ca codul să ia vreo acțiune.


32) Care sunt principalele diferențe dintre notify și notifyAll în Java?

Metoda Notify () nu oferă nicio modalitate de a alege un anumit thread, de aceea este utilă numai atunci când un singur While notifyAll() trimite o notificare către toate firele. De asemenea, le permite să concureze pentru încuietori. De asemenea, asigură că cel puțin un fir va continua.


33) Ce parametru JVM este folosit pentru a controla dimensiunea stivei unui fir?

Pentru a controla dimensiunea stivei Thread în Java este utilizat parametrul Xss.


34) Puteți începe un thread de două ori în Java?

Nu, odată ce un thread este pornit, acesta nu poate fi început a doua oară.


35) Care este scopul utilizării metodei de randament a clasei de filet?

Metoda Yield este cea mai simplă modalitate de a solicita firul curent să renunțe la CPU, astfel încât celălalt thread. Este o metodă statică și garantează doar că firul curent va renunța la CPU, dar nu spune nimic despre ce alt fir afectează și CPU.


36) Când putem spune că firele nu sunt procese ușoare în Java?

Firele de execuție nu sunt procese ușoare atunci când firele de execuție ale aceluiași proces se execută simultan. Deși, dacă firele de execuție ale diferitelor procese se execută concomitent în acel moment, firele de execuție devin un proces greu.


37) Este posibil să se sincronizeze constructorul unei clase Java?

Ca standard Java, constructorii nu pot fi sincronizați, deoarece alte fire de execuție nu pot vedea obiectul înainte ca procesul de creare a firului să-l încheie. Nu este nevoie ca constructorul de obiecte Java să fie sincronizat, deoarece ar bloca obiectul care este construit.


38) Ce este variabila tranzitorie?

O variabilă tranzitorie este o variabilă care nu poate fi serializată în timpul serializării. Este inițializat la valoarea sa implicită în timpul serializării.

Aceste întrebări de interviu vă vor ajuta, de asemenea, în viva (orale)

Distribuie

4 Comentarii

  1. Avatar antrenament java spune:

    hii
    chiar ma ajuta. în timpul pregătirii interviului.
    Este cu adevărat lăudabil să scrii acest articol și să oferi aceste informații.
    Icommnamed la

  2. Avatar Shwethashree Venkatesh spune:

    5) Care sunt stările firului?
    Runnable nu este starea Running. Este gata de rulare

    1. actualizat! Mulțumesc că ai subliniat asta

    2. Avatar Amuda Adeolu Badmus spune:

      1. Stările rulabile sunt privite ca un strat dublu la nivelul sistemului de operare

      2. Aproape toate limbajele de programare văd firul ca fiind rulabil sau NU.

      3.Un fir care poate fi rulat poate fi fie în starea (pregătit, fie în curs).

      4.Puteți avea două fire de execuție în stări care pot fi rulate, dar doar un fir de execuție va exista în starea de „rulare”,
      în timp ce al doilea fir există într-o stare „în rulare”.

Lasă un comentariu

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate *