package ibis.ipl.registry.central.server; import ibis.ipl.registry.central.Member; import ibis.util.ThreadPool; import java.util.LinkedHashSet; import java.util.Set; public class OndemandEventPusher implements Runnable { private final Pool pool; private final Set<Member> q; public OndemandEventPusher(Pool pool) { this.pool = pool; q = new LinkedHashSet<Member>(); ThreadPool.createNew(this, "Pusher"); } public synchronized void enqueue(Member member) { q.add(member); } public synchronized Member dequeue() { while (q.isEmpty()) { try { wait(1000); } catch (InterruptedException e) { // /IGNORE } } Member result = q.iterator().next(); q.remove(result); return result; } public void run() { while (true) { Member next = dequeue(); if (next == null) { // q empty, pool ended return; } pool.push(next, true, false); } } }