Die 40 wichtigsten Fragen und Antworten zu Java-Multithreading-Interviews – Ausgabe 2026

Die Vorbereitung auf ein Java-Multithreading-Interview erfordert ein tiefes Verständnis der Parallelitätskonzepte und praktische Erfahrung. Nachfolgend finden Sie 40 sorgfältig ausgearbeitete Fragen und Antworten von Experten, die alles von grundlegenden Definitionen bis hin zu fortgeschrittenen Themen wie virtuellen Threads und strukturierter Parallelität abdecken.
👉 Kostenloser PDF-Download:Fragen und Antworten zum Java Multithreading-Interview
1) Was ist Multithreading in Java und warum wird es verwendet?
Multithreading ermöglicht einer Java-Anwendung die gleichzeitige Ausführung mehrerer Threads, wodurch die CPU-Auslastung maximiert und die Reaktionsfähigkeit verbessert wird. Dies ist besonders wertvoll für E/A-gebundene Aufgaben, umfangreiche Berechnungen und GUI-Updates, bei denen ein Thread blockieren kann, während ein anderer die Verarbeitung fortsetzt.
Vorteile
- Höhere CPU-Auslastung
- Reduzierte Latenz für unabhängige Vorgänge
- Verbesserte Reaktionsfähigkeit der Benutzeroberfläche
Beispiel :Ein Webserver kann Dutzende von Client-Anfragen gleichzeitig verarbeiten, indem er jede Anfrage einem separaten Thread zuweist und so Blockaden bei E/A-Vorgängen vermeidet.
2) Erklären Sie den Lebenszyklus eines Threads in Java.
Java-Threads durchlaufen die folgenden Zustände:
| Bundesstaat | Beschreibung |
|---|---|
| Neu | Thread erstellt, aber noch nicht gestartet. |
| Ausführbar | Thread ist zur Ausführung bereit oder wird gerade ausgeführt. |
| Blockiert | Thread wartet auf eine Monitorsperre. |
| Warten | Thread wartet unbegrenzt auf das Signal eines anderen Threads. |
| Zeitgesteuertes Warten | Thread wartet für eine angegebene Dauer. |
| Beendet | Thread hat die Ausführung abgeschlossen. |
Wenn t.start() aufgerufen wird, wechselt der Thread von Neu zu Ausführbar .
3) Was ist der Unterschied zwischen einem Prozess und einem Thread?
| Kriterien | Prozess | Thread |
|---|---|---|
| Speicher | Eigener Adressraum | Teilt Prozessspeicher |
| Kommunikation | Erfordert IPC | Gibt den Speicher direkt frei |
| Erstellungskosten | Teuer | Leicht |
| Auswirkungen von Fehlern | Isoliert | Kann Auswirkungen auf Geschwister haben |
Beispielsweise kann ein Browserprozess mehrere Threads für Rendering, Netzwerk und Benutzerinteraktion enthalten.
4) Wie funktioniert die Synchronisierung in Java?
Durch die Synchronisierung wird sichergestellt, dass jeweils nur ein Thread auf eine gemeinsam genutzte Ressource zugreift, wodurch Race Conditions und Datenbeschädigungen vermieden werden. Der synchronized Das Schlüsselwort sperrt entweder eine ganze Methode oder einen bestimmten Block.
- Synchronisierte Methode – Sperrt den Monitor der Methode.
- Synchronisierter Block – sperrt ein ausgewähltes Objekt.
synchronized void increment() {
count++;
}
5) Welche verschiedenen Möglichkeiten gibt es, einen Thread in Java zu erstellen?
- Erweiterung von
Threadclass MyThread extends Thread { public void run() { System.out.println("Thread running"); } } new MyThread().start(); - Implementierung von
Runnableclass MyRunnable implements Runnable { public void run() { System.out.println("Runnable running"); } } new Thread(new MyRunnable()).start(); - Callable &Future (modern) – gibt einen Wert zurück und kann geprüfte Ausnahmen auslösen.
Callable
task = () -> 42; Future result = executor.submit(task); System.out.println(result.get());
6) Was ist der Unterschied zwischen start() und run() ?
| Aspekt | start() | run() |
|---|---|---|
| Thread-Erstellung | Erstellt einen neuen Betriebssystem-Thread | Wird im aktuellen Thread ausgeführt |
| Aufruf | Plant Thread in JVM | Einfacher Methodenaufruf |
| Parallelität | Asynchrone Ausführung | Sequentielle Ausführung |
Rufen Sie t.start() an startet einen neuen Thread; t.run() verhält sich wie jede andere Methode.
7) Erklären Sie das Konzept der Thread-Sicherheit und wie Sie es erreichen.
Thread-Sicherheit stellt sicher, dass der gleichzeitige Zugriff auf gemeinsam genutzte Daten den Status nicht beschädigt. Dies kann erreicht werden über:
synchronizedBlöcke oder MethodenvolatileVariablen- Explizite Sperren (z. B.
ReentrantLock,ReadWriteLock) - Thread-sichere Sammlungen (
ConcurrentHashMap,CopyOnWriteArrayList) - Atomklassen (
AtomicInteger,AtomicBoolean)
AtomicInteger counter = new AtomicInteger(); counter.incrementAndGet();
8) Was ist der Unterschied zwischen wait() , sleep() und yield() ?
| Methode | Klasse | Sperrfreigabe | Zweck | Dauer |
|---|---|---|---|---|
wait() | Objekt | Ja | Warten Sie auf Benachrichtigung | Bis zur Benachrichtigung |
sleep() | Thread | Nein | Ausführung anhalten | Feste Zeit |
yield() | Thread | Nein | Planerwechsel vorschlagen | Unvorhersehbar |
Verwenden Sie wait() für die Kommunikation zwischen Threads; Verwenden Sie sleep() um einen Thread anzuhalten.
9) Wie verbessert das Executor Framework die Thread-Verwaltung?
Das Framework entkoppelt die Aufgabenübermittlung von der Thread-Erstellung und ermöglicht so ein effizientes Thread-Pooling und die Wiederverwendung von Ressourcen. Es ist Teil von java.util.concurrent und bietet:
- Thread-Wiederverwendung für geringeren Overhead
- Flexible Pooltypen (Fixed, Cached, Single, Scheduled, Work-Stealing)
- Anmutige Abschaltmechanismen
ExecutorService executor = Executors.newFixedThreadPool(5);
executor.submit(() -> System.out.println("Task executed"));
executor.shutdown(); 10) Welche verschiedenen Arten von Thread-Pools sind in Java verfügbar?
| Pooltyp | Factory-Methode | Beschreibung |
|---|---|---|
| FixedThreadPool | newFixedThreadPool(n) | Feste Anzahl von Threads |
| CachedThreadPool | newCachedThreadPool() | Erstellt Threads nach Bedarf und verwendet inaktive Threads wieder |
| SingleThreadExecutor | newSingleThreadExecutor() | Einzelner Arbeitsthread für sequentielle Ausführung |
| ScheduledThreadPool | newScheduledThreadPool(n) | Unterstützt verzögerte oder periodische Aufgaben |
| WorkStealingPool | newWorkStealingPool() | Nutzt verfügbare Prozessoren dynamisch |
11) Was ist ein Deadlock in Java und wie kann er verhindert werden?
Ein Deadlock tritt auf, wenn zwei oder mehr Threads unbegrenzt darauf warten, dass der andere Threads Sperren freigibt. Dies ist typischerweise auf eine inkonsistente Sperrreihenfolge zurückzuführen.
synchronized (A) {
synchronized (B) { /*...*/ }
}
synchronized (B) {
synchronized (A) { /*...*/ }
}
Präventionsstrategien:
- Erwerben Sie Sperren in einer konsistenten globalen Reihenfolge.
- Verwenden Sie
tryLock()mit Timeout. - Vermeiden Sie nach Möglichkeit verschachtelte Sperren.
- Bevorzugen Sie Dienstprogramme für Parallelität auf hoher Ebene gegenüber manuellen Sperren.
12) Unterschied zwischen synchronized und ReentrantLock .
| Funktion | synchronized | ReentrantLock |
|---|---|---|
| Akquise | Implizit | Explizit über lock() |
| Entsperren | Automatisch beim Beenden der Methode | Handbuch über unlock() |
| Versuch/Zeitüberschreitung | Nicht verfügbar | Unterstützt tryLock() und Timeout |
| Fairness | Nicht konfigurierbar | Unterstützt faires Bestellen |
| Bedingungsvariablen | Nicht unterstützt | Unterstützt mehrere Condition Objekte |
ReentrantLock lock = new ReentrantLock();
if (lock.tryLock(1, TimeUnit.SECONDS)) {
try { /* critical section */ } finally { lock.unlock(); }
} 13) Unterschied zwischen volatile und synchronized .
| Aspekt | flüchtig | synchronisiert |
|---|---|---|
| Zweck | Sichtbarkeit | Atomizität + Sichtbarkeit |
| Atomizität | Keine Garantie | Garantiert |
| Sperren | Nein | Ja |
| Anwendungsfall | Einfache Flags | Zusammengesetzte Operationen |
volatile boolean running = true;
synchronized void increment() { count++; } 14) Erklären Sie ThreadLocal in Java.
ThreadLocal stellt Thread-spezifische Daten bereit, sodass kein gemeinsamer veränderlicher Zustand erforderlich ist. Jeder Thread greift auf seine eigene isolierte Kopie zu.
ThreadLocalcounter = ThreadLocal.withInitial(() -> 0); counter.set(counter.get() + 1);
- Verhindert Datenbeschädigung
- Nützlich für den Kontext pro Thread (z. B. Sitzungs-IDs)
- Muss
remove()aufgerufen werden in Thread-Pools, um Speicherlecks zu vermeiden
15) Was sind atomare Klassen in Java und warum werden sie verwendet?
Atomare Klassen (z. B. AtomicInteger , AtomicBoolean , AtomicReference ) führen sperrenfreie, threadsichere Vorgänge mithilfe von CAS (Compare-And-Swap) durch. Sie bieten im Vergleich zu synchronisierten Blöcken einen höheren Durchsatz für einfache Aktualisierungen.
AtomicInteger counter = new AtomicInteger(); counter.incrementAndGet();
16) Was ist ein Semaphor und wie unterscheidet es sich von einem Schloss?
| Aspekt | Semaphor | Sperren |
|---|---|---|
| Zweck | Gleichzeitigen Zugriff beschränken | Gegenseitiger Ausschluss |
| Genehmigungen | Mehrere | Einzeln |
| Blockierung | Erhält Genehmigung | Erwirbt Eigentum |
| Anwendungsfall | Verbindungspooling | Schutz kritischer Abschnitte |
Semaphore sem = new Semaphore(3); sem.acquire(); // use resource sem.release();
17) Erklären Sie das Fork/Join-Framework.
Es wurde in Java 7 eingeführt und ermöglicht die parallele Ausführung rekursiv aufteilbarer Aufgaben mithilfe eines Work-Stealing-Algorithmus. Inaktive Threads stehlen den beschäftigten Threads die Arbeit und maximieren so die CPU-Auslastung.
class SumTask extends RecursiveTask{ protected Integer compute() { if (end - start <= threshold) return computeDirectly(); int mid = (start + end) / 2; SumTask left = new SumTask(start, mid); SumTask right = new SumTask(mid, end); left.fork(); return right.compute() + left.join(); } }
18) Wie verbessert CompletableFuture die asynchrone Programmierung?
CompletableFuture ermöglicht nicht blockierende, zusammensetzbare asynchrone Vorgänge, eliminiert die Callback-Hölle und unterstützt Verkettung, Ausnahmebehandlung und parallele Komposition.
CompletableFuture.supplyAsync(() -> "Hello")
.thenApply(str -> str + " World")
.thenAccept(System.out::println); 19) Was ist ein Daemon-Thread?
Daemon-Threads laufen im Hintergrund und stellen Dienste wie Garbage Collection oder Timer-Aufgaben bereit. Die JVM beendet alle Daemon-Threads automatisch, wenn keine Benutzer-Threads mehr übrig sind.
Thread daemon = new Thread(() -> System.out.println("Daemon running"));
daemon.setDaemon(true);
daemon.start(); 20) Best Practices für Multithreading in Java.
- Bevorzugen Sie Nebenläufigkeitsdienstprogramme auf hoher Ebene (ExecutorService, BlockingQueue).
- Vermeiden Sie den gemeinsamen veränderlichen Zustand; Unveränderlichkeit bevorzugen.
- Verwenden Sie gleichzeitige Sammlungen über synchronisierte Wrapper.
- Behandeln Sie Unterbrechungen korrekt und stellen Sie das Interrupt-Flag wieder her.
- Ausführer ordnungsgemäß mit
shutdown()herunterfahren odershutdownNow(). - Minimieren Sie den Synchronisierungsbereich, um Konflikte zu reduzieren.
- Profil vor der Optimierung; Tools wie JFR und Async-Profiler helfen bei der Identifizierung von Hotspots.
21) Was ist das Java Memory Model (JMM) und warum ist es wichtig?
Das JMM definiert, wie Threads über den Speicher interagieren und sorgt für Sichtbarkeit, Reihenfolge und Atomizität. Es stellt die „events-before“-Beziehung her, die für das Schreiben korrekten gleichzeitigen Codes von entscheidender Bedeutung ist.
- Sichtbarkeit:Änderungen eines Threads müssen für andere sichtbar sein.
- Reihenfolge:Aktionen werden geordnet, um die Konsistenz zu wahren.
- Atomizität:Bestimmte Operationen sind unteilbar.
22) Unterschied zwischen ConcurrentHashMap und synchronisiertMap.
| Funktion | ConcurrentHashMap | synchronizedMap |
|---|---|---|
| Sperrgranularität | Segmentebene (teilweise) | Gesamte Karte |
| Leistung umstritten | Hoch | Niedrig |
| Nullschlüssel/-werte | Nicht zulässig | Zulässig |
| Iteratorkonsistenz | Schwach konsistent | Ausfallschnell |
| Gleichzeitige Lesevorgänge | Zulässig | Blockiert |
23) Erkennen und Debuggen von Deadlocks.
- Thread-Dumps über
jstack <pid>Blockaden aufdecken. - VisualVM oder JConsole bieten Thread-Überwachung in Echtzeit.
- Programmatische Erkennung mit
ThreadMXBean.findDeadlockedThreads().
24) Parallele Streams vs. explizite Threads.
Parallele Streams nutzen intern das Fork/Join-Framework und bieten eine High-Level-API für die Datenverarbeitung. Explizite Threads erfordern eine manuelle Verwaltung, bieten aber eine differenzierte Kontrolle.
| Aspekt | Parallele Streams | Threads |
|---|---|---|
| Abstraktion | High-Level-API | Low-Level-Steuerung |
| Verwaltung | Automatisch über ForkJoinPool | Manueller Thread-Pool |
| Tuning | Verwendet einen gemeinsamen Pool | Benutzerdefinierte Poolgröße |
| Fehlerbehandlung | Begrenzt | Volle Kontrolle |
25) CountDownLatch, CyclicBarrier und Phaser.
| Funktion | CountDownLatch | CyclicBarrier | Phaser |
|---|---|---|---|
| Zurücksetzen | Nein | Ja | Ja |
| Parteien | Behoben | Behoben | Dynamisch |
| Anwendungsfall | Warten Sie, bis die Aufgaben abgeschlossen sind | Threads zum Treffen | Dynamische Koordination |
CountDownLatch latch = new CountDownLatch(3);
for (...) new Thread(() -> { /* work */ latch.countDown(); }).start();
latch.await(); 26) Unterschied zwischen Callable und Runnable.
| Aspekt | Ausführbar | Aufrufbar |
|---|---|---|
| Rückgabewert | Nein | Ja |
| Überprüfte Ausnahmen | Nein | Ja |
| Paket | java.lang | java.util.concurrent |
Callabletask = () -> 42; Future result = executor.submit(task); System.out.println(result.get());
27) BlockingQueue für Producer-Consumer.
BlockingQueue bietet threadsichere Blockierungsvorgänge, die das Producer-Consumer-Muster vereinfachen.
BlockingQueuequeue = new ArrayBlockingQueue<>(10); new Thread(() -> queue.put(1)).start(); // Producer new Thread(() -> System.out.println(queue.take())).start(); // Consumer
- Entfernt den manuellen
wait()/notify(). - Unterstützt begrenzte und unbegrenzte Implementierungen.
28) Thread-Hunger und Livelock.
Hunger tritt auf, wenn Threads mit niedriger Priorität nie CPU-Zeit erhalten. Livelock tritt auf, wenn Threads kontinuierlich ihren Status ändern, aber keinen Fortschritt machen. Zur Schadensbegrenzung gehören faire Sperren, die Vermeidung geschäftiger Wartezeiten und eine ordnungsgemäße Planung.
29) Verbesserung der Leistung von Multithread-Anwendungen.
- Thread-Pools verwenden.
- Synchronisierungsbereich reduzieren.
- Nutzen Sie gleichzeitige Datenstrukturen.
- Bevorzugen Sie unveränderliche Objekte.
- Vermeiden Sie falsches Teilen.
- Thread-Anzahl auf CPU-Kerne abstimmen.
- Verwenden Sie asynchrone E/A zum Blockieren von Vorgängen.
30) Reales Multithreading-Szenario.
In einem Zahlungsgateway wurde die gleichzeitige Transaktionsverarbeitung optimiert durch:
- ExecutorService für Arbeitsthreads.
- ConcurrentHashMap für den Transaktionsstatus.
- ReentrantLock zum Sperren auf Kontoebene.
- CountDownLatch für die Batch-Synchronisierung.
- CompletableFuture für asynchrone Antworten.
Ergebnis:35 % Durchsatzsteigerung und 40 % Latenzreduzierung.
31) Virtuelle Threads in Java.
Virtuelle Threads, die in Java 21 eingeführt wurden, sind leichtgewichtige Threads, die von der JVM verwaltet werden und Millionen gleichzeitiger Aufgaben mit minimalem Overhead ermöglichen.
| Funktion | Plattform-Threads | Virtuelle Threads |
|---|---|---|
| Verwaltet von | Betriebssystem | JVM |
| Erstellungskosten | Hoch | Sehr niedrig |
| Parallelitätsebene | Tausende | Millionen |
| Planung | Betriebssystemebene | JVM kooperativ |
| Anwendungsfall | CPU-gebundene Aufgaben | E/A-gebundene/hohe Parallelitätsaufgaben |
Thread.startVirtualThread(() -> System.out.println("Virtual thread running")); 32) Strukturierte Parallelität.
Die strukturierte Parallelität, die in Java 21 als Vorschau gezeigt wird, behandelt mehrere gleichzeitige Aufgaben als eine einzige Einheit und stellt sicher, dass sie gemeinsam gestartet, verwaltet und beendet werden. Es eliminiert verwaiste Threads und vereinfacht die Fehlerweitergabe.
try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
Future user = scope.fork(() -> findUser());
Future order = scope.fork(() -> fetchOrderCount());
scope.join();
scope.throwIfFailed();
System.out.println(user.resultNow() + " has " + order.resultNow() + " orders.");
} 33) Reaktive Streams in Java.
Reaktive Streams bieten ein nicht blockierendes, gegendruckbewusstes Modell für die Verarbeitung von Datenströmen und bilden die Grundlage für Frameworks wie Project Reactor, RxJava und Spring WebFlux.
Publisher– erzeugt Daten.Subscriber– verbraucht Daten.Subscription– steuert den Fluss.Processor– sowohl Herausgeber als auch Abonnent.
Flow.Publisherpublisher = subscriber -> subscriber.onNext(42);
34) Richtige Thread-Unterbrechungsbehandlung.
Überprüfen Sie immer Thread.interrupted() in Schleifen, bereinigen Sie Ressourcen und bewahren Sie den Interrupt-Status nach dem Abfangen von InterruptedException .
while (!Thread.currentThread().isInterrupted()) {
try { Thread.sleep(1000); }
catch (InterruptedException e) {
Thread.currentThread().interrupt(); // restore flag
break;
}
} 35) Parallelität vs. Parallelität.
Parallelität verwaltet mehrere Aufgaben durch verschachtelte Ausführung, während Parallelität Aufgaben gleichzeitig über mehrere CPU-Kerne hinweg ausführt.
| Konzept | Definition | Beispiel |
|---|---|---|
| Parallelität | Aufgaben verschachteln | Bearbeitung von 1000 Clientanfragen gleichzeitig |
| Parallelität | Gleichzeitige Ausführung | Berechnungen über CPU-Kerne hinweg ausführen |
36) Tools und Techniken zur Thread-Profilierung.
| Werkzeug | Zweck |
|---|---|
| jstack | Thread-Dump-Erfassung |
| jconsole / VisualVM | Echtzeitüberwachung |
| Java Flight Recorder (JFR) | Profilerstellung mit geringem Overhead |
| Mission Control (JMC) | Visualisierung von JFR-Aufzeichnungen |
| async‑profiler | CPU- und Zuordnungsprofilierung |
| ThreadMXBean | Programmatische Inspektion |
ThreadMXBean bean = ManagementFactory.getThreadMXBean(); System.out.println(bean.getThreadCount());
37) Häufige Leistungsengpässe.
- Übermäßiger Sperrkonflikt.
- Falsche gemeinsame Nutzung von Variablen.
- Kontextwechsel-Overhead.
- Unsachgemäße Synchronisierung.
- Übermäßige Verwendung flüchtiger Variablen.
Zu den Optimierungen gehören feinkörniges Sperren, sperrenfreie Strukturen, die Minimierung der Thread-Erstellung und die Verwendung von Thread-lokalem Speicher.
38) Sperrfreie, wartefreie und hindernisfreie Algorithmen.
| Typ | Definition | Garantie |
|---|---|---|
| Sperrfrei | Mindestens ein Thread macht Fortschritte. | Systemweiter Fortschritt. |
| Warten Sie nicht | Jeder Thread macht in begrenzten Schritten Fortschritte. | Stärkste Garantie. |
| Behinderungsfrei | Fortschritt ohne Streit. | Schwächste Garantie. |
AtomicInteger-Operationen sind sperrenfrei; Blockierende Warteschlangen verwenden Sperren.
39) ForkJoinPool-Interna.
Jeder Arbeiter unterhält seine eigene Deque; Untätige Mitarbeiter stehlen Aufgaben von anderen, wodurch Konflikte reduziert und der Durchsatz verbessert werden.
ForkJoinPool pool = new ForkJoinPool(); pool.submit(() -> IntStream.range(0, 100).parallel().forEach(System.out::println));
40) Entwerfen eines hochgradig gleichzeitigen Systems für Millionen von Anfragen.
- Virtuelle Threads für eine einfache Anfragebearbeitung.
- Reaktive Streams für asynchrone E/A.
- Strukturierte Parallelität für vorhersehbare Aufgabenlebenszyklen.
- Hochleistungs-Caches (ConcurrentHashMap, Caffeine).
- Thread-sichere Warteschlangen (Disruptor, BlockingQueue).
- Überwachung mit JFR &JMC.
- CompletableFuture für asynchrone Workflows.
Ergebnis:Erreichen Sie Millionen gleichzeitiger Verbindungen mit minimaler Blockierung und optimaler Ressourcennutzung.
🔍 Die wichtigsten Java-Multithreading-Interviewfragen mit realen Szenarien und strategischen Antworten
Nachfolgend finden Sie zehn realistische Fragen, was Interviewer erwarten, und ausgefeilte Beispielantworten.
1) Unterschied zwischen einem Prozess und einem Thread in Java?
Der Kandidat sollte die Betriebssystem- und JVM-Grundlagen, die Speichernutzung und den Ausführungsablauf erläutern. Beispielsweise enthält ein Browserprozess mehrere Threads für Rendering, Netzwerk und Benutzereingaben.
2) Zweck des synchronized Schlüsselwort?
Erklärt Parallelitätskontrolle, intrinsische Sperren und Thread-Sicherheit. Dadurch wird sichergestellt, dass jeweils nur ein Thread auf einen kritischen Abschnitt zugreift.
3) Herausforderndes Multithreading-Problem erkannt und gelöst?
Beschreiben Sie ein Deadlock-Szenario, wie Sie es über Thread-Dumps identifiziert und durch Durchsetzung einer konsistenten Sperrreihenfolge gelöst haben.
4) Java-Speichermodell und Sichtbarkeit?
Beschreiben Sie, was passiert, bevor Beziehungen stattfinden, volatile und Synchronisationskonstrukte, die Sichtbarkeit und Ordnung gewährleisten.
5) Unterschied zwischen wait() , notify() und notifyAll() ?
Erklären Sie die Kommunikation zwischen Threads und überwachen Sie die Mechanik.
6) Optimierung einer Multithread-Anwendung?
Sperrkonflikt identifizieren, synchronized ersetzen mit ConcurrentHashMap und zeigen messbare Durchsatzsteigerungen.
7) Eine gemeinsam genutzte Datenstruktur sicher aktualisieren?
Verwenden Sie threadsichere Sammlungen oder explizites Sperren mit ReentrantLock für eine detaillierte Kontrolle.
8) Rolle von ExecutorService ?
Verwaltet einen Pool von Arbeitsthreads, reduziert den Overhead und vereinfacht die Lebenszyklusverwaltung.
9) Fehlerbehebung bei einer Rennbedingung?
Reproduzieren Sie unter Last, verbessern Sie die Protokollierung und beheben Sie das Problem durch Hinzufügen einer ordnungsgemäßen Synchronisierung.
10) Entwerfen einer Multithreading-Lösung mit unterschiedlichen Prioritäten?
Verwenden Sie eine Prioritätswarteschlange mit ThreadPoolExecutor und benutzerdefinierter Komparator für Aufgaben mit höherer Priorität.
Java
- Die 50 wichtigsten Fragen und Antworten zu Kotlin-Interviews (2026)
- Java-EnumSet
- Java - Modifikatortypen
- Java OutputStreamWriter-Klasse
- Java for-each-Schleife
- Insertion Sort Algorithmus in Java mit Programmbeispiel
- Java - Schleifensteuerung
- Java 10 - Root-Zertifikat
- Die 30 wichtigsten Fragen und Antworten zum Eclipse-Interview (2026)
- Java SortedMap-Schnittstelle