public void remove(final Steppable s) {
   synchronized (tasks) {
     if (s.getState() == SteppableState.RELEASED) {
       tasks.remove(s.getName());
     }
   }
 }
 public void submit(final Steppable s) {
   synchronized (tasks) {
     tasks.put(s.getName(), s);
   }
   s.setPool(this);
   getExecutor()
       .submit(
           new Runnable() {
             public void run() {
               s.initialize();
             }
           });
 }
 private boolean isIdle() {
   synchronized (tasks) {
     if (tasks.size() > 0) {
       lastUnidle = System.currentTimeMillis();
     }
     log().info("Pool still has " + (tasks.size()) + " tasks.");
     if (tasks.size() == lastCount) {
       for (Steppable s : tasks.values()) {
         log.info("Task : " + s.getName() + ":" + s.getState());
       }
     } else {
       lastCount = tasks.size();
     }
     return (tasks.size() <= 0);
   }
 }