Class DefaultBroadcaster

java.lang.Object
org.atmosphere.cpr.DefaultBroadcaster
All Implemented Interfaces:
Broadcaster
Direct Known Subclasses:
AbstractBroadcasterProxy, ExcludeSessionBroadcaster, SimpleBroadcaster

public class DefaultBroadcaster extends Object implements Broadcaster
The default Broadcaster implementation.

Broadcast messages to suspended responses using the caller's Thread. This basic Broadcaster use an ExecutorService to broadcast messages, hence the broadcast operation is asynchronous. Make sure you block on broadcast(Object).get()} if you need synchronous operations.

Lock Ordering

This class uses multiple locks to minimize contention. To prevent deadlocks, locks must be acquired in the following order:
  1. resourcesLock — guards the resources collection and cache interactions
  2. lock — general state/lifecycle guard (destroy, setID)
  3. awaitLock — condition signaling only; used in finally-blocks for awaitCondition.signalAll()
  4. Per-resource lock from resourceLocks — fine-grained write serialization per AtmosphereResource
  5. WriteQueue.lock — per-queue monitoring flag

Note: setScope(SCOPE) acquires resourcesLock then calls destroy(), which acquires lock. No code path must acquire lock before resourcesLock.