@Override public synchronized boolean offer(Runnable o) { //we can't do any checks if (parent==null){ return super.offer(o); } //we are maxed out on threads, simply queue the object if (parent.getPoolSize() == parent.getMaximumPoolSize()){ return super.offer(o); } //we have idle threads, just add it to the queue if (parent.getSubmittedCount()<(parent.getPoolSize())){ return super.offer(o); } //if we have less threads than maximum force creation of a new thread if (parent.getPoolSize()<parent.getMaximumPoolSize()){ return false; } //if we reached here, we need to add it to the queue return super.offer(o); }