Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

Top 40 Java Multithreading Interview Vragen & Antwoorden – 2026 Editie

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:

StatusBeschrijving
NewThread aangemaakt maar nog niet gestart.
RunnableThread is klaar om te draaien of draait momenteel.
BlockedThread wacht op een monitor-lock.
WaitingThread wacht oneindig op een signaal van een andere thread.
Timed WaitingThread wacht voor een gespecificeerde duur.
TerminatedThread 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?

CriteriaProcesThread
GeheugenEigen adresruimteDeelt procesgeheugen
CommunicatieVereist IPCDeelt geheugen direct
AanmaakkostenDuurLichtgewicht
FaalimpactGeïsoleerdKan 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.

  1. Gesynchroniseerde Methood – vergrendelt de monitor van de methode.
  2. Gesynchroniseerd Blok – vergrendelt een gekozen object.
 synchronized void increment() { count++; } 

5) Wat Zijn De Verschillende Manieren Om Een Thread In Java Te Creëren?

  1. Thread Uitbreiden
    class MyThread extends Thread { public void run() { System.out.println("Thread running"); } } new MyThread().start();
  2. Runnable Implementeren
    class MyRunnable implements Runnable { public void run() { System.out.println("Runnable running"); } } new Thread(new MyRunnable()).start();
  3. 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()?

Aspectstart()run()
Thread-aanmaakCreëert een nieuwe OS-threadVoert uit in huidige thread
AanroepPlant thread in JVMSimpele methode-aanroep
ConcurrentieAsynchrone uitvoeringSequentië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:

  • synchronized blokken of methoden
  • volatile variabelen
  • 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()?

MethodeKlasseLock VrijgaveDoelDuur
wait()ObjectJaWachten op notificatieTot genotificeerd
sleep()ThreadNeeUitvoering pauzerenVaste tijd
yield()ThreadNeeScheduler-switch suggererenOnvoorspelbaar

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 TypeFactory MethodeBeschrijving
FixedThreadPoolnewFixedThreadPool(n)Vast aantal threads
CachedThreadPoolnewCachedThreadPool()Creëert threads naar behoefte, hergebruikt idle
SingleThreadExecutornewSingleThreadExecutor()Enkele worker-thread voor sequentiële uitvoering
ScheduledThreadPoolnewScheduledThreadPool(n)Ondersteunt vertraagde of periodieke taken
WorkStealingPoolnewWorkStealingPool()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:

  1. Locks verwerven in een consistente globale volgorde.
  2. Gebruik tryLock() met een timeout.
  3. Vermijd geneste locks waar mogelijk.
  4. Voorkeur voor high-level concurrentie-utilities boven handmatige locks.

12) Verschil Tussen synchronized En ReentrantLock.

FeaturesynchronizedReentrantLock
AanwinstImplicietExpliciet via lock()
OntgrendelenAutomatisch bij methode-eindeHandmatig via unlock()
Try/TimeoutNiet beschikbaarOndersteunt tryLock() en timeout
EerlijkheidNiet configureerbaarOndersteunt eerlijke ordening
Condition VariabelenNiet ondersteundOndersteunt 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.

Aspectvolatilesynchronized
DoelZichtbaarheidAtomiciteit + zichtbaarheid
AtomiciteitGeen garantieGewaarborgd
LockingNeeJa
Use CaseEenvoudige vlaggenSamengestelde 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.

ThreadLocal counter = 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?

AspectSemaphoreLock
DoelGelijktijdige toegang beperkenOnderlinge uitsluiting
PermitsMeerdereEnkel
BlokkerenPermit verwervenEigendom verwerven
Use CaseConnection poolingKritieke 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.

  1. Voorkeur voor high-level concurrentie-utilities (ExecutorService, BlockingQueue).
  2. Vermijd gedeelde mutable state; favoriseer immutabiliteit.
  3. Gebruik concurrente collecties over gesynchroniseerde wrappers.
  4. Behandel interrupciones correct en herstel de interrupt-vlag.
  5. Sluit executors netjes af met shutdown() of shutdownNow().
  6. Minimaliseer synchronisatiescope om contention te reduceren.
  7. 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.

FeatureConcurrentHashMapsynchronizedMap
Locking-granulariteitSegment-niveau (gedeeltelijk)Hele map
Prestaties onder contentionHoogLaag
Null keys/valuesNiet toegestaanToegestaan
Iterator-consistentieWeakly consistentFail-fast
Concurrent readsToegestaanGeblokkeerd

23) Deadlocks Detecteren En Debuggen.

  1. Thread dumps via jstack <pid> onthullen deadlocks.
  2. VisualVM of JConsole bieden real-time thread-monitoring.
  3. 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.

AspectParallel StreamsThreads
AbstractieHigh-level APILow-level controle
BeheerAutomatisch via ForkJoinPoolHandmatige thread-pool
TuningGebruikt common poolCustom pool-grootte
FoutafhandelingBeperktVolledige controle

25) CountDownLatch, CyclicBarrier, En Phaser.

FeatureCountDownLatchCyclicBarrierPhaser
ResetNeeJaJa
PartijenVastVastDynamisch
Use caseWachten op taken te voltooienThreads bijeenkomenDynamische coördinatie
CountDownLatch latch = new CountDownLatch(3); for (...) new Thread(() -> { /* werk */ latch.countDown(); }).start(); latch.await();

26) Verschil Tussen Callable En Runnable.

AspectRunnableCallable
RetourwaardeNeeJa
Checked exceptionsNeeJa
Pakketjava.langjava.util.concurrent
Callable task = () -> 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.

BlockingQueue queue = 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.

  1. Thread-pools gebruiken.
  2. Synchronisatiescope reduceren.
  3. Concurrente datastructuren benutten.
  4. Immuutbare objecten prefereren.
  5. False sharing vermijden.
  6. Thread-aantal afstemmen op CPU-kernen.
  7. Asynchrone I/O voor blokkerende operaties gebruiken.

30) Real-world Multithreading Scenario.

In een betalingsgateway werd gelijktijdige transactieverwerking geoptimaliseerd door:

  1. ExecutorService voor worker-threads.
  2. ConcurrentHashMap voor transactiestatus.
  3. ReentrantLock voor rekening-niveau locking.
  4. CountDownLatch voor batch-synchronisatie.
  5. 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.

FeaturePlatform ThreadsVirtuele Threads
Beheerd doorOSJVM
AanmaakkostenHoogZeer laag
ConcurrentieniveauDuizendenMiljoenen
SchedulingOS-niveauJVM-coöperatief
Use caseCPU-gebonden takenI/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.Publisher publisher = 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.

ConceptDefinitieVoorbeeld
ConcurrentieTaken interleaven1000 clientverzoeken gelijktijdig afhandelen
ParallelismeSimultane uitvoeringBerekeningen uitvoeren over CPU-kernen

36) Thread-profilering Tools En Technieken.

ToolDoel
jstackThread-dump vastleggen
jconsole / VisualVMReal-time monitoring
Java Flight Recorder (JFR)Lage-overhead profiling
Mission Control (JMC)JFR-opnames visualiseren
async-profilerCPU & allocatie profiling
ThreadMXBeanProgrammatische inspectie
ThreadMXBean bean = ManagementFactory.getThreadMXBean(); System.out.println(bean.getThreadCount());

37) Veelvoorkomende Prestatie-knelpunten.

  1. Overmatige lock-contention.
  2. False sharing van variabelen.
  3. Context-switch overhead.
  4. Onjuiste synchronisatie.
  5. 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.

TypeDefinitieGarantie
Lock-vrijMinstens één thread maakt vooruitgang.Systeem-brede vooruitgang.
Wait-vrijElke thread maakt vooruitgang in gebonden stappen.Stekste garantie.
Obstruction-vrijVooruitgang 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.

  1. Virtuele threads voor lichtgewicht verzoekafhandeling.
  2. Reactieve streams voor asynchrone I/O.
  3. Gestructureerde concurrentie voor voorspelbare taaklevenscycli.
  4. High-performance caches (ConcurrentHashMap, Caffeine).
  5. Thread-veilige queues (Disruptor, BlockingQueue).
  6. Monitoring met JFR & JMC.
  7. 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

  1. Java 10 Ontwikkelomgeving instellen: Bouwen, compileren en uitvoeren
  2. Java's final-sleutelwoord begrijpen: variabelen, methoden en klassen
  3. Java Hello World: je eerste programma
  4. Java StringReader: Karakters uit strings lezen
  5. Java Reguliere Expressies: Patroonherkenning onder de knie krijgen met java.util.regex
  6. Java Generics beheersen: Sortering vereenvoudigen & Typeveiligheid verbeteren
  7. Java ArrayDeque beheersen: Uitgebreide handleiding & Stack-implementatie
  8. Java NavigableSet interface: Navigatie, sortering en praktische voorbeelden
  9. Java 9 Ontwikkelomgeving Installatiehandleiding
  10. Java if…else beheersen: control flow uitgelegd
  11. Java SortedMap-interface: Overzicht, methoden en TreeMap-implementatie