BlockingMessageQueue Class — netty Architecture
Architecture documentation for the BlockingMessageQueue class in Recycler.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 97ffd903_aa9f_4bb1_fb52_3d8d31957095["BlockingMessageQueue"] 92da7dba_a9f6_c802_c3c1_5a54e228e444["Recycler.java"] 97ffd903_aa9f_4bb1_fb52_3d8d31957095 -->|defined in| 92da7dba_a9f6_c802_c3c1_5a54e228e444 5eb06f14_17b7_4c00_13fc_67944070f068["BlockingMessageQueue()"] 97ffd903_aa9f_4bb1_fb52_3d8d31957095 -->|method| 5eb06f14_17b7_4c00_13fc_67944070f068 60d28342_cd00_7665_0a39_f0dc7344b7ce["offer()"] 97ffd903_aa9f_4bb1_fb52_3d8d31957095 -->|method| 60d28342_cd00_7665_0a39_f0dc7344b7ce 93a4024b_2dfa_6141_05a8_48652fa97707["T()"] 97ffd903_aa9f_4bb1_fb52_3d8d31957095 -->|method| 93a4024b_2dfa_6141_05a8_48652fa97707 488a82ea_db5d_5e9e_da1b_a8fbb2279f0a["size()"] 97ffd903_aa9f_4bb1_fb52_3d8d31957095 -->|method| 488a82ea_db5d_5e9e_da1b_a8fbb2279f0a 36b84b1e_6937_1813_06f0_95d540834c5f["clear()"] 97ffd903_aa9f_4bb1_fb52_3d8d31957095 -->|method| 36b84b1e_6937_1813_06f0_95d540834c5f b0953fef_6e93_b5b9_d38b_266e5c1d5e3e["isEmpty()"] 97ffd903_aa9f_4bb1_fb52_3d8d31957095 -->|method| b0953fef_6e93_b5b9_d38b_266e5c1d5e3e 2336a9c5_b74c_39a9_7164_00cae2b03547["capacity()"] 97ffd903_aa9f_4bb1_fb52_3d8d31957095 -->|method| 2336a9c5_b74c_39a9_7164_00cae2b03547 77b5d948_e88e_4b7a_2631_d9a53d4ddbba["relaxedOffer()"] 97ffd903_aa9f_4bb1_fb52_3d8d31957095 -->|method| 77b5d948_e88e_4b7a_2631_d9a53d4ddbba 61df7570_a6e3_8a6e_f34b_b337c0db1999["drain()"] 97ffd903_aa9f_4bb1_fb52_3d8d31957095 -->|method| 61df7570_a6e3_8a6e_f34b_b337c0db1999 1bae6161_fa26_081d_9366_0a483c4ec194["fill()"] 97ffd903_aa9f_4bb1_fb52_3d8d31957095 -->|method| 1bae6161_fa26_081d_9366_0a483c4ec194
Relationship Graph
Source Code
common/src/main/java/io/netty/util/Recycler.java lines 623–728
private static final class BlockingMessageQueue<T> implements MessagePassingQueue<T> {
private final Queue<T> deque;
private final int maxCapacity;
BlockingMessageQueue(int maxCapacity) {
this.maxCapacity = maxCapacity;
// This message passing queue is backed by an ArrayDeque instance,
// made thread-safe by synchronising on `this` BlockingMessageQueue instance.
// Why ArrayDeque?
// We use ArrayDeque instead of LinkedList or LinkedBlockingQueue because it's more space efficient.
// We use ArrayDeque instead of ArrayList because we need the queue APIs.
// We use ArrayDeque instead of ConcurrentLinkedQueue because CLQ is unbounded and has O(n) size().
// We use ArrayDeque instead of ArrayBlockingQueue because ABQ allocates its max capacity up-front,
// and these queues will usually have large capacities, in potentially great numbers (one per thread),
// but often only have comparatively few items in them.
deque = new ArrayDeque<T>();
}
@Override
public synchronized boolean offer(T e) {
if (deque.size() == maxCapacity) {
return false;
}
return deque.offer(e);
}
@Override
public synchronized T poll() {
return deque.poll();
}
@Override
public synchronized T peek() {
return deque.peek();
}
@Override
public synchronized int size() {
return deque.size();
}
@Override
public synchronized void clear() {
deque.clear();
}
@Override
public synchronized boolean isEmpty() {
return deque.isEmpty();
}
@Override
public int capacity() {
return maxCapacity;
}
@Override
public boolean relaxedOffer(T e) {
return offer(e);
}
@Override
public T relaxedPoll() {
return poll();
}
@Override
public T relaxedPeek() {
return peek();
}
@Override
public int drain(Consumer<T> c, int limit) {
T obj;
int i = 0;
for (; i < limit && (obj = poll()) != null; i++) {
c.accept(obj);
}
return i;
}
Source
Frequently Asked Questions
What is the BlockingMessageQueue class?
BlockingMessageQueue is a class in the netty codebase, defined in common/src/main/java/io/netty/util/Recycler.java.
Where is BlockingMessageQueue defined?
BlockingMessageQueue is defined in common/src/main/java/io/netty/util/Recycler.java at line 623.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free