Top 40 Java Multithreading Interview Vragen & Antwoorden – 2026 Editie

Zich voorbereiden op een Java multithreading interview vereist een diep begrip van concurrency-concepten en praktische ervaring. Hieronder vindt u 40 zorgvuldig samengestelde vragen en expertantwoorden die alles dekken van basisdefinities tot geavanceerde onderwerpen zoals virtuele threads en gestructureerde concurrentie.
👉 Gratis PDF Download: Java Multithreading Interview Vragen & Antwoorden
1) Wat Is Multithreading In Java En Waarom Wordt Het Gebruikt?
Multithreading stelt een Java-applicatie in staat om meerdere threads gelijktijdig uit te voeren, wat CPU-gebruik maximaliseert en responsiviteit verbetert. Het is met name waardevol voor I/O-gebonden taken, grootschalige berekeningen, en GUI-updates waar één thread kan blokkeren terwijl een andere doorgaat met verwerken.
Voordelen
- Hogere CPU-gebruik
- Verminderde latentie voor onafhankelijke operaties
- Verbeterde UI-responsiviteit
Voorbeeld: Een webserver kan tientallen clientverzoeken simultaan afhandelen door elk verzoek aan een aparte thread toe te wijzen, waardoor blokkeren op I/O-operaties vermeden wordt.
2) Leg De Levenscyclus Van Een Thread In Java Uit.
Java-threads doorlopen de volgende statussen:
| Status | Beschrijving |
|---|---|
| New | Thread aangemaakt maar nog niet gestart. |
| Runnable | Thread is klaar om te draaien of draait momenteel. |
| Blocked | Thread wacht op een monitor-lock. |
| Waiting | Thread wacht oneindig op een signaal van een andere thread. |
| Timed Waiting | Thread wacht voor een gespecificeerde duur. |
| Terminated | Thread heeft uitvoering voltooid. |
Wanneer t.start() aangeroepen wordt, beweegt de thread van New naar Runnable.
3) Wat Is Het Verschil Tussen Een Proces En Een Thread?
| Criteria | Proces | Thread |
|---|---|---|
| Geheugen | Eigen adresruimte | Deelt procesgeheugen |
| Communicatie | Vereist IPC | Deelt geheugen direct |
| Aanmaakkosten | Duur | Lichtgewicht |
| Faalimpact | Geïsoleerd | Kan broers/zussen beïnvloeden |
Bijvoorbeeld, een browserproces kan meerdere threads bevatten voor rendering, netwerken, en gebruikersinteractie.
4) Hoe Werkt Synchronisatie In Java?
Synchronisatie garandeert dat slechts één thread tegelijkertijd toegang heeft tot een gedeelde bron, wat race-conditions en datacorruptie voorkomt. Het synchronized keyword vergrendelt ofwel een hele methode of een specifiek blok.
- Gesynchroniseerde Methood – vergrendelt de monitor van de methode.
- Gesynchroniseerd Blok – vergrendelt een gekozen object.
synchronized void increment() { count++; }
5) Wat Zijn De Verschillende Manieren Om Een Thread In Java Te Creëren?
ThreadUitbreidenclass MyThread extends Thread { public void run() { System.out.println("Thread running"); } } new MyThread().start();RunnableImplementerenclass MyRunnable implements Runnable { public void run() { System.out.println("Runnable running"); } } new Thread(new MyRunnable()).start();Callable&Future(modern) – retourneert een waarde en kan checked exceptions gooien.Callable
task = () -> 42; Future result = executor.submit(task); System.out.println(result.get());
6) Wat Is Het Verschil Tussen start() En run()?
| Aspect | start() | run() |
|---|---|---|
| Thread-aanmaak | Creëert een nieuwe OS-thread | Voert uit in huidige thread |
| Aanroep | Plant thread in JVM | Simpele methode-aanroep |
| Concurrentie | Asynchrone uitvoering | Sequentiële uitvoering |
Het aanroepen van t.start() lanceert een nieuwe thread; t.run() gedraagt zich als elke andere methode.
7) Leg Het Concept Van Thread-veiligheid Uit En Hoe Het Te Bereiken.
Thread-veiligheid zorgt ervoor dat gelijktijdige toegang tot gedeelde data de staat niet corrupt. Het kan bereikt worden via:
synchronizedblokken of methodenvolatilevariabelen- Expliciete locks (bijv.
ReentrantLock,ReadWriteLock) - Thread-veilige collecties (
ConcurrentHashMap,CopyOnWriteArrayList) - Atomische klassen (
AtomicInteger,AtomicBoolean)
AtomicInteger counter = new AtomicInteger(); counter.incrementAndGet();
8) Wat Is Het Verschil Tussen wait(), sleep(), En yield()?
| Methode | Klasse | Lock Vrijgave | Doel | Duur |
|---|---|---|---|---|
wait() | Object | Ja | Wachten op notificatie | Tot genotificeerd |
sleep() | Thread | Nee | Uitvoering pauzeren | Vaste tijd |
yield() | Thread | Nee | Scheduler-switch suggereren | Onvoorspelbaar |
Gebruik wait() voor inter-thread-communicatie; gebruik sleep() om een thread te pauzeren.
9) Hoe Verbetert Het Executor Framework Thread-beheer?
Het framework ontkoppelt taakinschrijving van thread-aanmaak, wat efficiënte thread-pooling en hergebruik van bronnen mogelijk maakt. Het is onderdeel van java.util.concurrent en biedt:
- Thread-hergebruik voor lagere overhead
- Flexibele pool-typen (Fixed, Cached, Single, Scheduled, Work-Stealing)
- Netjes afsluit-mechanismen
ExecutorService executor = Executors.newFixedThreadPool(5); executor.submit(() -> System.out.println("Taak uitgevoerd")); executor.shutdown();
10) Wat Zijn De Verschillende Typen Thread Pools Beschikbaar In Java?
| Pool Type | Factory Methode | Beschrijving |
|---|---|---|
| FixedThreadPool | newFixedThreadPool(n) | Vast aantal threads |
| CachedThreadPool | newCachedThreadPool() | Creëert threads naar behoefte, hergebruikt idle |
| SingleThreadExecutor | newSingleThreadExecutor() | Enkele worker-thread voor sequentiële uitvoering |
| ScheduledThreadPool | newScheduledThreadPool(n) | Ondersteunt vertraagde of periodieke taken |
| WorkStealingPool | newWorkStealingPool() | Benut beschikbare processors dynamisch |
11) Wat Is Een Deadlock In Java En Hoe Kan Het Voorkomen Worden?
Een deadlock treedt op wanneer twee of meer threads oneindig wachten op elkaar om locks vrij te geven. Het ontstaat typisch door inconsistent lock-volgorde.
synchronized (A) { synchronized (B) { /*...*/ } }
synchronized (B) { synchronized (A) { /*...*/ } }
Preventiestrategieën:
- Locks verwerven in een consistente globale volgorde.
- Gebruik
tryLock()met een timeout. - Vermijd geneste locks waar mogelijk.
- Voorkeur voor high-level concurrentie-utilities boven handmatige locks.
12) Verschil Tussen synchronized En ReentrantLock.
| Feature | synchronized | ReentrantLock |
|---|---|---|
| Aanwinst | Impliciet | Expliciet via lock() |
| Ontgrendelen | Automatisch bij methode-einde | Handmatig via unlock() |
| Try/Timeout | Niet beschikbaar | Ondersteunt tryLock() en timeout |
| Eerlijkheid | Niet configureerbaar | Ondersteunt eerlijke ordening |
| Condition Variabelen | Niet ondersteund | Ondersteunt meerdere Condition objecten |
ReentrantLock lock = new ReentrantLock(); if (lock.tryLock(1, TimeUnit.SECONDS)) { try { /* kritieke sectie */ } finally { lock.unlock(); } }
13) Verschil Tussen volatile En synchronized.
| Aspect | volatile | synchronized |
|---|---|---|
| Doel | Zichtbaarheid | Atomiciteit + zichtbaarheid |
| Atomiciteit | Geen garantie | Gewaarborgd |
| Locking | Nee | Ja |
| Use Case | Eenvoudige vlaggen | Samengestelde operaties |
volatile boolean running = true;
synchronized void increment() { count++; }
14) Leg ThreadLocal In Java Uit.
ThreadLocal biedt thread-specifieke data, wat de noodzaak voor gedeelde mutable state elimineert. Elke thread benadert zijn eigen geïsoleerde kopie.
ThreadLocalcounter = ThreadLocal.withInitial(() -> 0); counter.set(counter.get() + 1);
- Voorkomt datacorruptie
- Nuttig voor per-thread context (bijv. sessie-ID's)
- Moet
remove()aanroepen in thread-pools om geheugenlekken te voorkomen
15) Wat Zijn Atomische Klassen In Java En Waarom Worden Ze Gebruikt?
Atomische klassen (bijv. AtomicInteger, AtomicBoolean, AtomicReference) voeren lock-vrije, thread-veilige operaties uit via CAS (Compare-And-Swap). Ze bieden hogere doorvoer voor simpele updates vergeleken met gesynchroniseerde blokken.
AtomicInteger counter = new AtomicInteger(); counter.incrementAndGet();
16) Wat Is Een Semaphore En Hoe Verschilt Het Van Een Lock?
| Aspect | Semaphore | Lock |
|---|---|---|
| Doel | Gelijktijdige toegang beperken | Onderlinge uitsluiting |
| Permits | Meerdere | Enkel |
| Blokkeren | Permit verwerven | Eigendom verwerven |
| Use Case | Connection pooling | Kritieke sectie-bescherming |
Semaphore sem = new Semaphore(3); sem.acquire(); // resource gebruiken sem.release();
17) Leg Het Fork/Join Framework Uit.
Geïntroduceerd in Java 7, stelt het parallelle uitvoering van recursief splitsbare taken in via een work-stealing algoritme. Idle threads stelen werk van drukke threads, wat CPU-gebruik maximaliseert.
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) Hoe Verbeterd CompletableFuture Asynchrone Programmering?
CompletableFuture stelt non-blokkerende, composeerbare asynchrone operaties in, eliminerend callback-hel en ondersteunend chaining, exception-handling, en parallelle compositie.
CompletableFuture.supplyAsync(() -> "Hello") .thenApply(str -> str + " World") .thenAccept(System.out::println);
19) Wat Is Een Daemon-thread?
Daemon-threads draaien op de achtergrond, leveren diensten zoals garbage collection of timer-taken. De JVM beëindigt alle daemon-threads automatisch wanneer geen user-threads meer overblijven.
Thread daemon = new Thread(() -> System.out.println("Daemon running")); daemon.setDaemon(true); daemon.start();
20) Best Practices Voor Multithreading In Java.
- Voorkeur voor high-level concurrentie-utilities (ExecutorService, BlockingQueue).
- Vermijd gedeelde mutable state; favoriseer immutabiliteit.
- Gebruik concurrente collecties over gesynchroniseerde wrappers.
- Behandel interrupciones correct en herstel de interrupt-vlag.
- Sluit executors netjes af met
shutdown()ofshutdownNow(). - Minimaliseer synchronisatiescope om contention te reduceren.
- Profileer vóór optimaliseren; tools als JFR en async-profiler helpen hotspots identificeren.
21) Wat Is Het Java Memory Model (JMM) En Waarom Is Het Belangrijk?
Het JMM definieert hoe threads interacteren via geheugen, wat zichtbaarheid, ordening, en atomiciteit garandeert. Het vestigt de happens-before-relatie, wat cruciaal is voor het schrijven van correcte concurrente code.
- Zichtbaarheid: Wijzigingen door één thread moeten door anderen gezien worden.
- Ordening: Acties zijn geordend om consistentie te behouden.
- Atomiciteit: Bepaalde operaties zijn ongedeeltelijk.
22) Verschil Tussen ConcurrentHashMap En synchronizedMap.
| Feature | ConcurrentHashMap | synchronizedMap |
|---|---|---|
| Locking-granulariteit | Segment-niveau (gedeeltelijk) | Hele map |
| Prestaties onder contention | Hoog | Laag |
| Null keys/values | Niet toegestaan | Toegestaan |
| Iterator-consistentie | Weakly consistent | Fail-fast |
| Concurrent reads | Toegestaan | Geblokkeerd |
23) Deadlocks Detecteren En Debuggen.
- Thread dumps via
jstack <pid>onthullen deadlocks. - VisualVM of JConsole bieden real-time thread-monitoring.
- Programmatische detectie met
ThreadMXBean.findDeadlockedThreads().
24) Parallel Streams Vs. Expliciete Threads.
Parallel streams gebruiken intern het Fork/Join framework, wat een high-level API biedt voor dataverwerking. Expliciete threads vereisen handmatig beheer maar bieden fijnmazige controle.
| Aspect | Parallel Streams | Threads |
|---|---|---|
| Abstractie | High-level API | Low-level controle |
| Beheer | Automatisch via ForkJoinPool | Handmatige thread-pool |
| Tuning | Gebruikt common pool | Custom pool-grootte |
| Foutafhandeling | Beperkt | Volledige controle |
25) CountDownLatch, CyclicBarrier, En Phaser.
| Feature | CountDownLatch | CyclicBarrier | Phaser |
|---|---|---|---|
| Reset | Nee | Ja | Ja |
| Partijen | Vast | Vast | Dynamisch |
| Use case | Wachten op taken te voltooien | Threads bijeenkomen | Dynamische coördinatie |
CountDownLatch latch = new CountDownLatch(3); for (...) new Thread(() -> { /* werk */ latch.countDown(); }).start(); latch.await();
26) Verschil Tussen Callable En Runnable.
| Aspect | Runnable | Callable |
|---|---|---|
| Retourwaarde | Nee | Ja |
| Checked exceptions | Nee | Ja |
| Pakket | java.lang | java.util.concurrent |
Callabletask = () -> 42; Future result = executor.submit(task); System.out.println(result.get());
27) BlockingQueue Voor Producer-consumer.
BlockingQueue biedt thread-veilige blokkerende operaties die het producer-consumer-patroon vereenvoudigen.
BlockingQueuequeue = new ArrayBlockingQueue<>(10); new Thread(() -> queue.put(1)).start(); // Producer new Thread(() -> System.out.println(queue.take())).start(); // Consumer
- Elimineert handmatige
wait()/notify(). - Ondersteunt bounded en unbounded implementaties.
28) Thread Starvation En Livelock.
Starvation treedt op wanneer lage-prioriteit threads nooit CPU-tijd ontvangen. Livelock gebeurt wanneer threads continu state veranderen maar geen vooruitgang boeken. Mitigatie omvat eerlijke locks, vermijden van busy-waits, en correcte scheduling.
29) Prestaties Van Multithreaded Applicaties Verbeteren.
- Thread-pools gebruiken.
- Synchronisatiescope reduceren.
- Concurrente datastructuren benutten.
- Immuutbare objecten prefereren.
- False sharing vermijden.
- Thread-aantal afstemmen op CPU-kernen.
- Asynchrone I/O voor blokkerende operaties gebruiken.
30) Real-world Multithreading Scenario.
In een betalingsgateway werd gelijktijdige transactieverwerking geoptimaliseerd door:
- ExecutorService voor worker-threads.
- ConcurrentHashMap voor transactiestatus.
- ReentrantLock voor rekening-niveau locking.
- CountDownLatch voor batch-synchronisatie.
- CompletableFuture voor asynchrone responses.
Resultaat: 35% doorvoertoename en 40% latentiereductie.
31) Virtuele Threads In Java.
Virtuele threads, geïntroduceerd in Java 21, zijn lichtgewicht threads beheerd door de JVM, wat miljoenen gelijktijdige taken met minimale overhead mogelijk maakt.
| Feature | Platform Threads | Virtuele Threads |
|---|---|---|
| Beheerd door | OS | JVM |
| Aanmaakkosten | Hoog | Zeer laag |
| Concurrentieniveau | Duizenden | Miljoenen |
| Scheduling | OS-niveau | JVM-coöperatief |
| Use case | CPU-gebonden taken | I/O-gebonden / hoge-concurrentie taken |
Thread.startVirtualThread(() -> System.out.println("Virtuele thread running"));
32) Gestructureerde Concurrentie.
Preview in Java 21, behandelt gestructureerde concurrentie meerdere gelijktijdige taken als een enkele eenheid, wat garandeert dat ze samen gestart, beheerd, en beëindigd worden. Het elimineert wees-threads en vereenvoudigt foutpropagatie.
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) Reactieve Streams In Java.
Reactieve Streams bieden een non-blokkerend, back-pressure-aware model voor het hanteren van datastromen, vormend de basis voor frameworks als Project Reactor, RxJava, en Spring WebFlux.
Publisher– produceert data.Subscriber– consumeert data.Subscription– controleert stroom.Processor– zowel publisher als subscriber.
Flow.Publisherpublisher = subscriber -> subscriber.onNext(42);
34) Correcte Thread-interruptie Afhandeling.
Controleer altijd Thread.interrupted() in lussen, ruim resources op, en behoud de interrupt-status na het vangen van InterruptedException.
while (!Thread.currentThread().isInterrupted()) { try { Thread.sleep(1000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); // herstel vlag break; } }
35) Parallelisme Vs. Concurrentie.
Concurrentie beheert meerdere taken door uitvoering te interleaven, terwijl parallelisme taken simultaan uitvoert over meerdere CPU-kernen.
| Concept | Definitie | Voorbeeld |
|---|---|---|
| Concurrentie | Taken interleaven | 1000 clientverzoeken gelijktijdig afhandelen |
| Parallelisme | Simultane uitvoering | Berekeningen uitvoeren over CPU-kernen |
36) Thread-profilering Tools En Technieken.
| Tool | Doel |
|---|---|
| jstack | Thread-dump vastleggen |
| jconsole / VisualVM | Real-time monitoring |
| Java Flight Recorder (JFR) | Lage-overhead profiling |
| Mission Control (JMC) | JFR-opnames visualiseren |
| async-profiler | CPU & allocatie profiling |
| ThreadMXBean | Programmatische inspectie |
ThreadMXBean bean = ManagementFactory.getThreadMXBean(); System.out.println(bean.getThreadCount());
37) Veelvoorkomende Prestatie-knelpunten.
- Overmatige lock-contention.
- False sharing van variabelen.
- Context-switch overhead.
- Onjuiste synchronisatie.
- Overmatig gebruik van volatile-variabelen.
Optimalisaties omvatten fijnmazige locking, lock-vrije structuren, minimaliseren van thread-aanmaak, en thread-lokale opslag gebruiken.
38) Lock-vrij, Wait-vrij, En Obstruction-vrije Algoritmes.
| Type | Definitie | Garantie |
|---|---|---|
| Lock-vrij | Minstens één thread maakt vooruitgang. | Systeem-brede vooruitgang. |
| Wait-vrij | Elke thread maakt vooruitgang in gebonden stappen. | Stekste garantie. |
| Obstruction-vrij | Vooruitgang in afwezigheid van contention. | Zwakste garantie. |
AtomicInteger-operaties zijn lock-vrij; blocking queues gebruiken locks.
39) ForkJoinPool Interna.
Elke worker onderhoudt zijn eigen deque; idle workers stelen taken van anderen, wat contention reduceert en doorvoer verbetert.
ForkJoinPool pool = new ForkJoinPool(); pool.submit(() -> IntStream.range(0, 100).parallel().forEach(System.out::println));
40) Een Hoog-gelijktijdig Systeem Ontwerpen Voor Miljoenen Verzoeken.
- Virtuele threads voor lichtgewicht verzoekafhandeling.
- Reactieve streams voor asynchrone I/O.
- Gestructureerde concurrentie voor voorspelbare taaklevenscycli.
- High-performance caches (ConcurrentHashMap, Caffeine).
- Thread-veilige queues (Disruptor, BlockingQueue).
- Monitoring met JFR & JMC.
- CompletableFuture voor asynchrone workflows.
Resultaat: Miljoenen gelijktijdige verbindingen bereiken met minimale blokkering en optimale resource-gebruik.
🔍 Top Java Multithreading Interview Vragen Met Real-world Scenario's En Strategische Antwoorden
Hieronder staan tien realistische vragen, wat interviewers verwachten, en gepolijste voorbeeldantwoorden.
1) Verschil Tussen Een Proces En Een Thread In Java?
Kandidaat moet OS- en JVM-fundamenten, geheugengebruik, en uitvoeringsstroom uitleggen. Bijvoorbeeld, een browserproces bevat meerdere threads voor rendering, netwerken, en gebruikersinput.
2) Doel Van Het synchronized Keyword?
Uitlegt concurrency-controle, intrinsieke locks, en thread-veiligheid. Het zorgt ervoor dat slechts één thread een kritieke sectie tegelijkertijd benadert.
3) Uitdagend Multithreading-issue Ondervonden En Opgelost?
Beschrijf een deadlock-scenario, hoe geïdentificeerd via thread-dumps, en opgelost door een consistente lock-volgorde af te dwingen.
4) Java Memory Model En Zichtbaarheid?
Beschrijft happens-before-relaties, volatile, en synchronisatieconstructies die zichtbaarheid en ordening garanderen.
5) Verschil Tussen wait(), notify(), En notifyAll()?
Uitleg inter-thread-communicatie en monitor-mechanica.
6) Een Multithreaded Applicatie Optimaliseren?
Identificeer lock-contention, vervang synchronized met ConcurrentHashMap, en toon meetbare doorvoertoename.
7) Een Gedeelde Datastructuur Veilig Updaten?
Gebruik thread-veilige collecties of expliciete locking met ReentrantLock voor granulair controle.
8) Rol Van ExecutorService?
Beheert een pool van worker-threads, vermindert overhead, en vereenvoudigt lifecycle-beheer.
9) Een Race-condition Troubleshooten?
Reproduceren onder load, logging verbeteren, en oplossen door juiste synchronisatie toe te voegen.
10) Een Multithreading-oplossing Ontwerpen Met Variërende Prioriteiten?
Gebruik een priority queue met ThreadPoolExecutor en custom comparator voor hogere-prioriteit taken.
Java
- Java 10 Ontwikkelomgeving instellen: Bouwen, compileren en uitvoeren
- Java's final-sleutelwoord begrijpen: variabelen, methoden en klassen
- Java Hello World: je eerste programma
- Java StringReader: Karakters uit strings lezen
- Java Reguliere Expressies: Patroonherkenning onder de knie krijgen met java.util.regex
- Java Generics beheersen: Sortering vereenvoudigen & Typeveiligheid verbeteren
- Java ArrayDeque beheersen: Uitgebreide handleiding & Stack-implementatie
- Java NavigableSet interface: Navigatie, sortering en praktische voorbeelden
- Java 9 Ontwikkelomgeving Installatiehandleiding
- Java if…else beheersen: control flow uitgelegd
- Java SortedMap-interface: Overzicht, methoden en TreeMap-implementatie