public boolean offer(IExecutionUnit eu) {
final ReentrantLock lock = this.lock;
lock.lock();
try {
if (eu instanceof DelayedExecutionUnit) {
DelayedExecutionUnit deu = (DelayedExecutionUnit) eu;
DelayedExecutionUnit first = delayed.peek();
delayed.offer(deu);
if (first == null || deu.compareTo(first) < 0)
available.signalAll();
} else {
immediate.offer((EventExecutionUnit) eu);