Back to all articles
System Design January 30, 2026Updated 11 min read

Concurrency Questions That Trip Up Most Candidates

Concurrency is the topic that makes even experienced engineers sweat during interviews. It's abstract, the bugs are non-deterministic, and the wrong answer can reveal fundamental gaps in systems knowledge. Here's the complete guide to mastering the concurrency questions that trip up most candidates.

Close-up of a high-performance computing motherboard with parallel processors

Concurrency vs. Parallelism: The Foundation

The first question interviewers ask to test your understanding is deceptively simple: "What's the difference between concurrency and parallelism?" Most candidates conflate them. Here's the precise distinction:

ConceptDefinitionAnalogy
ConcurrencyMultiple tasks making progress in overlapping time periodsOne chef working on 3 dishes, switching between them
ParallelismMultiple tasks executing simultaneously on multiple coresThree chefs each making one dish simultaneously
"Concurrency is about dealing with lots of things at once. Parallelism is about doing lots of things at once."
- Rob Pike, co-creator of Go, in his talk Concurrency Is Not Parallelism (2012)

Threads vs. Processes

This is a favorite interview question at companies like Amazon, Microsoft, and Stripe. Understanding the trade-offs is critical:

FeatureThreadsProcesses
MemoryShared memory spaceIsolated memory space
Creation costLightweight (~1MB stack)Heavyweight (full address space)
CommunicationDirect (shared vars)IPC needed (pipes, sockets)
Crash isolationOne crash kills allIsolated failures
SynchronizationRequired (mutexes, etc.)Not needed (isolated)
Complex circuit board illustrating parallel processing pathways

Race Conditions: The Silent Killer

A race condition occurs when the correctness of a program depends on the relative timing of events. They're the hardest bugs to reproduce and the most common concurrency interview topic.

⚠️ Classic Race Condition: Check-Then-Act

// Thread A and Thread B both execute this:
if (balance > amount) {
balance -= amount; // RACE: both threads read same balance
}
// Fix: wrap in synchronized block or use atomic operations

Deadlock: The Four Conditions

Deadlock occurs when two or more threads are waiting for each other to release resources, and none can proceed. In interviews, you must know the four Coffman conditions-all four must be present for deadlock to occur:

  • 1. Mutual Exclusion: Resources can only be held by one thread at a time
  • 2. Hold and Wait: A thread holding resources can request additional ones
  • 3. No Preemption: Resources can't be forcibly taken from a thread
  • 4. Circular Wait: A circular chain of threads, each waiting for a resource held by the next

To prevent deadlock, you only need to break one of these conditions. The most practical approach is preventing circular wait by always acquiring locks in a consistent global order.

Server room with organized rack-mounted servers at a data center

Mutex vs. Semaphore vs. Monitor

PrimitivePurposeAnalogyUse Case
MutexMutual exclusion (1 thread)Bathroom key (1 user)Protecting shared state
SemaphoreLimit concurrent access (N)Parking lot (N spots)Connection pools, rate limiting
MonitorMutex + condition variablesWaiting room with a buzzerProducer-consumer patterns

Modern Async Patterns

Beyond traditional threading, modern systems rely on async/await patterns and event loops. Understanding these is increasingly critical for interviews at companies building high-throughput systems.

Callbacks

The original async pattern. Simple but leads to "callback hell" with deep nesting. Common in Node.js legacy code.

Promises/Futures

Chainable, composable async operations. Better error handling. The backbone of modern JavaScript and Java CompletableFuture.

Async/Await

Syntactic sugar over promises. Reads like synchronous code. Available in Python, JS, Rust, C#, and Kotlin.

A good test of your own readiness: can you explain the difference between optimistic and pessimistic locking, and say when you would choose each? A clear answer to that one question shows more systems maturity than reciting definitions.

Close-up of technology circuits representing concurrent processing systems

Top 5 Concurrency Interview Questions

Q1
Design a thread-safe singleton

Discuss double-checked locking, the volatile keyword, and why enum singletons are preferred in Java.

Q2
Implement a bounded blocking queue

Producer-consumer pattern with wait/notify or condition variables. Discuss spurious wakeups.

Q3
Dining Philosophers Problem

Classic deadlock scenario. Discuss resource ordering, Chandy/Misra solution, and real-world parallels.

Q4
Read-write lock implementation

Allow multiple readers or a single writer. Discuss starvation and fairness policies.

Q5
Design a rate limiter (Token Bucket)

Thread-safe token bucket with configurable refill rate. Discuss atomic operations vs locks.

Digital visualization of interconnected global networks and data flows

Master Concurrency Under Pressure

Devana's mock interviews let you practice explaining threading, locking and consistency trade-offs out loud, with an AI interviewer that asks follow-up questions. In a system design round, concurrency often turns into a queue: the guide to message queues and async work covers delivery guarantees and idempotent consumers, and a system design mock interview with AI lets you defend those choices out loud. For the rest of the loop, backend engineer interview prep works through idempotency, database questions and a two-week plan.