package net.johnewart.gearman.engine.core; import net.johnewart.gearman.common.interfaces.EngineWorker; import org.eclipse.jetty.util.ConcurrentHashSet; import java.util.concurrent.atomic.AtomicLong; public class WorkerPool { private final ConcurrentHashSet<EngineWorker> sleepingWorkers; private final ConcurrentHashSet<EngineWorker> connectedWorkers; private final AtomicLong numberOfConnectedWorkers; public WorkerPool(final String name) { sleepingWorkers = new ConcurrentHashSet<>(); connectedWorkers = new ConcurrentHashSet<>(); numberOfConnectedWorkers = new AtomicLong(0); } public void addWorker(final EngineWorker worker) { connectedWorkers.add(worker); numberOfConnectedWorkers.incrementAndGet(); } public void removeWorker(final EngineWorker worker) { sleepingWorkers.remove(worker); connectedWorkers.remove(worker); numberOfConnectedWorkers.decrementAndGet(); } public void markSleeping(final EngineWorker worker) { sleepingWorkers.add(worker); worker.markAsleep(); } public void wakeupWorkers() { for (final EngineWorker w : sleepingWorkers) { w.wakeUp(); } } public void markAwake(final EngineWorker worker) { sleepingWorkers.remove(worker); } public long getNumberOfConnectedWorkers() { return numberOfConnectedWorkers.longValue(); } }