Die 40 wichtigsten Fragen und Antworten zu Multithreading-Interviews (2024)
Die häufigsten Fragen im Vorstellungsgespräch zum Thema Java Multithreading
Hier finden Sie Fragen und Antworten zu Multithreading-Interviewfragen für Erstsemester und erfahrene Kandidaten, die ihren Traumjob bekommen möchten.
1) Was ist ein Thread?
Ein Thread ist eine gleichzeitige Ausführungseinheit. Wir können sagen, dass es sich um einen Teil des Prozesses handelt, der problemlos gleichzeitig mit anderen Teilen des Prozesses ablaufen kann.
Kostenloser PDF-Download: Fragen und Antworten zum Multithreading-Interview
2) Was ist Multithreading?
Multithreading In Java handelt es sich um einen Prozess, bei dem zwei oder mehr Threads gleichzeitig ausgeführt werden, um die CPU maximal auszulasten.
Der Hauptvorteil ist:
- Threads teilen sich denselben Adressraum
- Der Faden bleibt leicht
- Die Kosten für die Kommunikation zwischen Threads sind gering.
3) Welche Zustände sind mit dem Thread verbunden?
- Bereit
- Laufen
- Warten
- Toter Zustand
4) Einen Thread-Lebenszyklus besprechen?
Der Lebenszyklus eines Threads ähnelt dem Lebenszyklus von Prozessen, die in einem Thread ausgeführt werden Betriebssystem. Während seines Lebenszyklus kann der Thread von einem Zustand in einen anderen wechseln. Dies hängt jedoch von der durchgeführten Operation ab.
5) Was sind die Thread-Zustände?
Im Folgenden sind die verschiedenen Thread-Status aufgeführt:
Neu: Ein gerade instanziierter Thread befindet sich im neuen Zustand. Wenn eine start()-Methode aufgerufen wird, wechselt der Thread in den Bereitschaftszustand. Anschließend wird es vom Thread-Scheduler in den ausführbaren Zustand versetzt.
- Lauffähig: Ein Thread, der zur Ausführung bereit ist
- Laufen: Ein Thread, der gerade ausgeführt wird, befindet sich im Ausführungsstatus.
- Gesperrt: In diesem Zustand wartet ein blockierter Thread auf eine Monitorsperre. Dies kann auch passieren, wenn ein Thread eine E/A-Operation ausführt und in den nächsten Status wechselt.
- Warten: Es handelt sich um einen Thread, der darauf wartet, dass ein anderer Thread die spezifische Aktion ausführt.
- Timed_waiting: Es handelt sich um einen Thread, der auf die Ausführung eines anderen Threads wartet.
- Beendet: Ein Thread, der beendet wurde, befindet sich in diesem Zustand.
6) Was sind die Hauptunterschiede zwischen Thread und Process?
Der Thread ist eine Teilmenge des Prozesses. Der Prozess kann mehrere Threads enthalten. Der Prozess kann auf unterschiedlichem Speicherplatz ausgeführt werden, aber alle Threads teilen sich denselben Speicherplatz.
7) Was ist ein Deadlock?
Deadlock ist eine Situation, in der ein Thread auf eine Objektsperre wartet, die von einem anderen Thread erworben wird, und ein zweiter Thread ebenfalls auf eine Objektsperre wartet, die vom ersten Thread erworben wird. Da beide Threads auf die gegenseitige Freigabe warten, wird dieser Zustand als Deadlock bezeichnet.
8) Was ist LiveLock?
Livelock tritt auf, wenn alle Threads blockiert sind und nicht ausgeführt werden können, weil die erforderlichen Ressourcen nicht verfügbar sind und kein nicht blockierter Thread vorhanden ist.
Livelock kann unter den folgenden Bedingungen auftreten:
- Wenn alle Threads in einem Programm auf einem Objekt mit null Parametern ausgeführt werden. Das Programm ist live gesperrt und wird erst dann verarbeitet, wenn ein oder mehrere Threads Object.notify() oder Object.notifyAll() für die relevanten Objekte aufrufen.
- Livelock tritt auch auf, wenn alle Threads in einem Programm in Endlosschleifen stecken bleiben.
9) Was ist ein Monitor?
- Der Monitor ist ein Codekörper, der jeweils nur von einem Thread ausgeführt werden kann.
- Wenn ein anderer Thread gleichzeitig versucht, Zugriff zu erhalten, wird er angehalten, bis der aktuelle Thread den Monitor freigibt.
10) Was meinst du mit Fadenmangel?
In der Situation, wenn ein Thread nicht über genügend CPU für seine Ausführung verfügt, kommt es zu Thread-Hunger.
Es kann jedoch in den folgenden Szenarien passieren
- Threads mit niedriger Priorität erhalten im Vergleich zu Threads mit hoher Priorität weniger CPU. Threads mit niedrigerer Priorität können verhungern, während sie darauf warten, mehr CPU-Speicherplatz für die Durchführung von Berechnungen zu erhalten.
- Der Thread wartet möglicherweise unbegrenzt auf eine Sperre für den Monitor des Objekts, aber notify() weckt möglicherweise wiederholt andere Threads. In diesem Fall verhungert auch der Faden.
11) Was bedeutet Busy Spin beim Multithreading?
Busy Spin ist eine Technik, die gleichzeitig arbeitende Programmierer verwenden, um einen Thread unter einer bestimmten Bedingung warten zu lassen. Dies unterscheidet sich erheblich von herkömmlichen Methoden wie wait() und sleep(), bei denen alle auf die CPU-Kontrolle verzichtet werden müssen. Diese Methode erfordert keinen CPU-Abbruch, sondern führt lediglich die leere Schleife aus.
12) Was ist Kontextwechsel beim Multithreading?
Dabei handelt es sich um den Prozess des Speicherns und Wiederherstellens des CPU-Status. Das hilft fortsetzen Thread-Ausführung vom selben Punkt zu einem späteren Zeitpunkt. Es ist eine der wesentlichen Funktionen für Multitasking-Betriebssysteme und unterstützt die Multithread-Umgebung.
13) Warum ist das Thread-Verhalten unvorhersehbar?
Wir können sagen, dass das Thread-Verhalten unvorhersehbar ist, da die Ausführung von Threads vom Thread-Scheduler abhängt. Man sollte bedenken, dass jeder Thread-Scheduler auf verschiedenen Plattformen wie Windows, Unix usw. eine andere Implementierung hat.
14) Wie kann man die Ausführung eines Threads für eine bestimmte Zeit anhalten?
Mit der Methode „sleep()“ wird die Ausführung des Threads für eine bestimmte Zeit angehalten. Dadurch wird die Verarbeitung des Threads jedoch nicht für eine bestimmte Zeit gestoppt. Wenn der Thread jedoch aus dem Ruhezustand erwacht, ändert sich sein Status in „ausführbar“ und basierend auf der Thread-Planung wird er ausgeführt.
15) Auf welche zahlreichen Arten kann ein Thread in den Wartezustand wechseln?
Ein Thread kann auf folgende Weise in den Wartezustand gelangen
- Verwendung der Methode „sleep()“.
- Blockierung bei E/A
- Der Versuch, die Sperre eines Objekts zu erlangen, ist erfolglos
- Durch Aufrufen der wait()-Methode eines Objekts
16) Was passiert, wenn wir eine Ausführungsmethode nicht überschreiben?
Wenn wir in Java die start()-Methode für einen Thread aufrufen, ruft es intern die run()-Methode mit dem neu erstellten Thread auf. Wenn wir also die Methode run( ) nicht überschreiben, wird der neu erstellte Thread nicht aufgerufen, sodass nichts passiert.
Beispiel:
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) Was ist der Hauptunterschied zwischen der Thread.start()- und der Thread?run()-Methode?
Die Thread.start()-Methode (native Methode) der Thread-Klasse übernimmt die Aufgabe, die Thread.A run()-Methode in einem Thread auszuführen. Wenn wir also Thread direkt aufrufen, wird die run()-Methode auch im selben Thread ausgeführt. Daher wird der Zweck der Erstellung eines neuen Threads niemals gelöst.
18) Wie erstelle ich einen Thread in Java?
Es gibt zwei Methoden zum Erstellen eines Threads in Java.
- Zuerst durch die Implementierung der Runnable-Schnittstelle und dann durch die Erstellung eines Thread-Objekts daraus.
- Die zweite Methode besteht darin, die Thread-Klasse zu erweitern.
19) Was bedeutet Thread-Priorität?
Jeder Thread hat eine Priorität. Allerdings hat auch eine höhere Priorität Vorrang bei der Ausführung. Dies hängt jedoch auch von der Thread-Scheduler-Implementierung ab, die vom Betriebssystem abhängt. Es ist möglich, die Priorität des Threads zu ändern, es gibt jedoch keine Garantie dafür, dass Threads mit höherer Priorität zuerst ausgeführt werden.
20) Was macht die Methode join()?
Die Methode join() wartet darauf, dass ein Thread stirbt. Es zwingt alle laufenden Threads, die Ausführung zu stoppen, bis der Thread beitritt, um seine Aufgabe abzuschließen.
21) Was ist Java Shutdown Hook?
Der Java-Shutdown-Hook wird zum Bereinigen von Ressourcen verwendet, wenn die JVM heruntergefahren wird. Saubere Ressourcen bedeuten das Schließen der Protokolldatei, das Senden einiger Warnungen oder etwas anderes. Der Shutdown-Hook muss verwendet werden, um Code auszuführen, bevor die JVM heruntergefahren wird.
22) Was sind die beiden Hauptverwendungen von Volatile in Java?
Threads dürfen die Werte von Variablen im lokalen Speicher speichern. Wenn eine Variable als flüchtig markiert ist, muss sie jedes Mal, wenn dieselbe Variable verwendet wird, aus dem Hauptspeicher gelesen werden.
Ebenso muss bei jedem Schreiben der Variablen der Wert im Hauptspeicher gespeichert werden.
23) Wie können Sie Daten zwischen zwei Threads in Java teilen?
Wir können Daten zwischen Threads mithilfe eines gemeinsam genutzten Objekts oder gleichzeitig abrufen Datenstruktur wie BlockingQueue. Es implementiert ein Producer-Consumer-Muster mithilfe von Warte- und Benachrichtigungsmethoden. Dazu gehört auch die gemeinsame Nutzung von Objekten zwischen zwei Threads.
24) Wie können mehrere Threads gleichzeitig gesteuert werden?
Mehrere Threads können gleichzeitig gesteuert werden, wenn sie in einem ThreadGroup-Objekt erstellt werden.
25) Was ist eine Blockierungsmethode in Java?
In Java ist eine Blockierungsmethode eine Methode, die blockiert, bis die Aufgabe erledigt ist. Beispielsweise blockiert die Methode „accept()“ von ServerSocket, bis ein Client eine Verbindung herstellt. Hier bezieht sich das Blockieren auf alles, dessen Kontrolle erst nach Abschluss der Aufgabe an den Aufrufer zurückgegeben wird.
26) Was ist der Hauptunterschied zwischen der Wait()- und der Sleep()-Methode?
Warten() | Schlaf () |
Diese Methode ist in der Object-Klasse definiert | Die Methode ist in der Thread-Klasse definiert |
Die Wait()-Methode gibt die Sperre frei | Diese Methode gibt die Sperre niemals frei. |
27) Was ist ein unveränderliches Objekt? Wie kann es beim Schreiben einer gleichzeitigen Bewerbung hilfreich sein?
Jedes Objekt kann als unanfechtbar betrachtet werden, wenn sich sein Zustand nach seiner Konstruktion nicht ändert. Unveränderliche Objekte werden zum Erstellen einfacher, zuverlässiger und gleichzeitiger Anwendungen verwendet.
Um ein Objekt unveränderlich zu erstellen, ist es wichtig, die Klasse und ihr Mitglied endgültig zu machen, damit sich der Status des Objekts nach der Erstellung nicht ändert.
28) Erklären Sie mir den Unterschied zwischen Nachgeben und Schlafen?
Wenn eine Aufgabe ihre yield()-Methode aufruft, kehrt sie in den Bereitschaftszustand zurück.
Wenn eine Aufgabe ihre Methode „sleep()“ aufruft, kehrt sie in den Wartezustand zurück.
29) Was ist ThreadPool?
ThreadPool ist ein Thread-Pool, der eine feste Anzahl von Threads wiederverwendet, um die spezifische Aufgabe auszuführen.
30) Wozu dient das Synchronized-Schlüsselwort?
Das Schlüsselwort „Synchronized“ kann entweder auf die statische oder nicht statische Methode angewendet werden. Mit Synchronized kann nur ein Thread auf synchronisierte Methoden zugreifen. Allerdings in der Situation, in der mehrere Threads versuchen, auf dieselbe Methode zuzugreifen. Zu diesem Zeitpunkt müssen andere Threads auf den Ausführungsthread warten. Außerdem wird das Objekt gesperrt, um eine Race-Bedingung zu verhindern.
public void synchronized method1(){} public void synchronized staticmethod1(){} public void myMethod(){ synchronized (this){ //synchronized keyword on block of code } }
31) Was ist ein volatiles Schlüsselwort?
Das Schlüsselwort „Volatile“ ist ein Qualifikationsmerkmal, das bei der Deklaration einer Variablen angewendet wird. Es teilt dem Compiler mit, dass sich der Wert der Variablen jederzeit ändern kann – ohne dass der Code eine Aktion ausführt.
32) Was sind die Hauptunterschiede zwischen notify und notifyAll in Java?
Die Notify()-Methode bietet keine Möglichkeit, einen bestimmten Thread auszuwählen. Deshalb ist sie nur nützlich, wenn ein einzelner While notifyAll() eine Benachrichtigung an alle Threads sendet. Es ermöglicht ihnen auch, um Schlösser zu konkurrieren. Es stellt außerdem sicher, dass mindestens ein Thread weitergeht.
33) Welcher JVM-Parameter wird verwendet, um die Stapelgröße eines Threads zu steuern?
Zur Steuerung der Stapelgröße von Threads in Java wird der Parameter Xss verwendet.
34) Kann man in Java einen Thread zweimal starten?
Nein, sobald ein Thread gestartet ist, kann er nicht ein zweites Mal gestartet werden.
35) Was ist der Zweck der Verwendung der Yield-Methode der Thread-Klasse?
Die Yield-Methode ist die einfachste Möglichkeit, den aktuellen Thread aufzufordern, die CPU für den anderen Thread freizugeben. Es ist eine statische Methode und garantiert nur, dass der aktuelle Thread die CPU freigibt, sagt aber nichts darüber aus, welcher andere Thread ebenfalls Auswirkungen auf die CPU hat.
36) Wann können wir sagen, dass Threads in Java kein leichtgewichtiger Prozess sind?
Threads sind keine leichtgewichtigen Prozesse, wenn Threads desselben Prozesses gleichzeitig ausgeführt werden. Wenn jedoch zu diesem Zeitpunkt Threads verschiedener Prozesse gleichzeitig ausgeführt werden, werden Threads zu einem schwergewichtigen Prozess.
37) Ist es möglich, den Konstruktor einer Java-Klasse zu synchronisieren?
Als Java-Standard können Konstruktoren nicht synchronisiert werden, da andere Threads das Objekt nicht sehen können, bevor der Thread-Erstellungsprozess abgeschlossen ist. Es ist nicht erforderlich, dass der Java Objects-Konstruktor synchronisiert wird, da er das zu erstellende Objekt sperren würde.
38) Was ist eine transiente Variable?
Eine transiente Variable ist eine Variable, die während der Serialisierung nicht serialisiert werden kann. Es wird während der Serialisierung auf seinen Standardwert initialisiert.
Diese Interviewfragen helfen auch bei Ihrer mündlichen Prüfung
Hallo ich
Es hilft mir wirklich. während der Interviewvorbereitung.
Es ist wirklich lobenswert, diesen Artikel zu schreiben und diese Informationen bereitzustellen.
Ich kann es nur empfehlen
5) Was sind die Thread-Zustände?
Runnable ist nicht der Status „Running“. Es ist betriebsbereit
Aktualisiert! Vielen Dank für den Hinweis
1.Ausführbare Zustände werden auf Betriebssystemebene als Doppelschicht betrachtet
2. Fast alle Programmiersprachen betrachten den Thread als ausführbar oder NICHT.
3. Ein ausführbarer Thread kann sich entweder im Status (bereit oder ausgeführt) befinden.
4. Sie könnten zwei Threads in ausführbaren Zuständen haben, aber nur ein Thread wird im „laufenden“ Zustand existieren.
während der zweite Thread in einem „laufenden“ Zustand existiert.