Refactor TaskQueue to use RetryableQueue interface #861
+28
−2
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
When creating a custom
<Executor className="myCoolClass">
, developers may also want to use their ownBlockingQueue<Runnable>
implementation instead of the defaultTaskQueue
.While
ThreadPoolExecutor
accepts anyBlockingQueue<Runnable>
in its constructor, it assumes/expects the queue is aTaskQueue
when handlingRejectedExecutionException
, as shown in the snippet below:tomcat/java/org/apache/tomcat/util/threads/ThreadPoolExecutor.java
Lines 1338 to 1346 in 6cfb392
Proposed changes
Introduce a
RetryableQueue<T>
interface with the.force(T)
method. This allows users to implement custom TaskQueue-like queues that can integrate with the existing rejection handling logic by implementing this interface.