}
public boolean offer(Runnable o) {
- if (parent != null && parent.getPoolSize()<parent.getMaximumPoolSize()){
- return false;
- } else {
- //if we reached here, we need to add it to the queue
- //or can't do any checks
- return super.offer(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.getActiveCount()<(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);
}
}