Core concept
BlockingQueue q = new LinkedBlockingQueue<>(100);
q.put(task);
Task t = q.take(); Advertisement
How it works
Bounded vs unbounded. Fair vs unfair. Choose per contention.
Advertisement
Trade-offs + gotchas
Producer-consumer pipelines.