@Override protected void doExecute(Runnable task) { while (true) { int casValue = queuedTaskCount.get(); if (casValue >= queuedTaskLimit) { rejectedExecutionHandler.handleRejectedTask(task); return; // in case handler did not throw exception } else if (queuedTaskCount.compareAndSet(casValue, casValue + 1)) { try { parentExecutor.execute(new DecrementingRunnable(task, queuedTaskCount)); } catch (RejectedExecutionException e) { queuedTaskCount.decrementAndGet(); throw e; } break; } // else loop and retry } }
protected void doSchedule(Runnable task, long delayInMillis, TaskPriority priority) { if (dontLimitStarvable && priority == TaskPriority.Starvable) { parentScheduler.schedule(task, delayInMillis, priority); return; } while (true) { int casValue = queuedTaskCount.get(); if (casValue >= getQueueLimit()) { rejectedExecutionHandler.handleRejectedTask(task); return; // in case handler did not throw exception } else if (queuedTaskCount.compareAndSet(casValue, casValue + 1)) { try { parentScheduler.schedule(new DecrementingRunnable(task, queuedTaskCount), delayInMillis, priority); } catch (RejectedExecutionException e) { queuedTaskCount.decrementAndGet(); throw e; } break; } // else loop and retry } }
protected void doSchedule(Runnable task, long delayInMillis, TaskPriority priority) { if (dontLimitStarvable && priority == TaskPriority.Starvable) { parentScheduler.schedule(task, delayInMillis, priority); return; } while (true) { int casValue = queuedTaskCount.get(); if (casValue >= getQueueLimit()) { rejectedExecutionHandler.handleRejectedTask(task); return; // in case handler did not throw exception } else if (queuedTaskCount.compareAndSet(casValue, casValue + 1)) { try { parentScheduler.schedule(new DecrementingRunnable(task, queuedTaskCount), delayInMillis, priority); } catch (RejectedExecutionException e) { queuedTaskCount.decrementAndGet(); throw e; } break; } // else loop and retry } }
@Override protected void doSchedule(Runnable task, long delayInMillis) { while (true) { int casValue = queuedTaskCount.get(); if (casValue >= queuedTaskLimit) { rejectedExecutionHandler.handleRejectedTask(task); return; // in case handler did not throw exception } else if (queuedTaskCount.compareAndSet(casValue, casValue + 1)) { try { parentScheduler.schedule(new DecrementingRunnable(task, queuedTaskCount), delayInMillis); } catch (RejectedExecutionException e) { queuedTaskCount.decrementAndGet(); throw e; } break; } // else loop and retry } } }
@Override protected void doExecute(Runnable task) { while (true) { int casValue = queuedTaskCount.get(); if (casValue >= queuedTaskLimit) { rejectedExecutionHandler.handleRejectedTask(task); return; // in case handler did not throw exception } else if (queuedTaskCount.compareAndSet(casValue, casValue + 1)) { try { parentExecutor.execute(new DecrementingRunnable(task, queuedTaskCount)); } catch (RejectedExecutionException e) { queuedTaskCount.decrementAndGet(); throw e; } break; } // else loop and retry } }
@Override protected void doSchedule(Runnable task, long delayInMillis) { while (true) { int casValue = queuedTaskCount.get(); if (casValue >= queuedTaskLimit) { rejectedExecutionHandler.handleRejectedTask(task); return; // in case handler did not throw exception } else if (queuedTaskCount.compareAndSet(casValue, casValue + 1)) { try { parentScheduler.schedule(new DecrementingRunnable(task, queuedTaskCount), delayInMillis); } catch (RejectedExecutionException e) { queuedTaskCount.decrementAndGet(); throw e; } break; } // else loop and retry } } }