RejectedExecutionHandler

Hat jemand ein Beispiel für mich zu einem Einsatz des RejectedExecutionHandlers für den ThreadPoolExecutor? Wie bekomme ich es hin das überzählige Runnables noch ausgeführt werden?


    @Override
    public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
        
    }

}```
Möchte den Handler in meinen Executor setzen.


executor = new ThreadPoolExecutor(CORE_THREADS, numberOfThreads, KEEP_ALIVE_TIME, TimeUnit.SECONDS, new ArrayBlockingQueue(BLOCKING_QUEUE_SIZE, true), new ThreadPoolExecutor.CallerRunsPolicy());

was genau ist dein Ziel?
ich kann nicht mehr als API lesen anbieten, aber die shutdown-Methode sollte doch alle ‘überzähligen Runnables noch ausgeführen’ bei Ende des Services?

wann ein RejectedExecutionHandler überhaupt aktiv werden könnte ist interessante Frage,


hier in diesem Link ist Aussage dazu beschränkt auf ‘If a request cannot be queued’ ohne rechte Erklärung, vielleicht Warteplätze limitiert?..
BLOCKING_QUEUE_SIZE bei dir mag auch in diese Richtung gehen, wenn es denn sein muss…

da gibt es auch eine Implementierung von RejectedExecutionHandler, die es schlicht nach einer kleinen Wartezeit erneut versucht, hilfts?
was soll man sonst viel mehr machen wenn Executor voll

[QUOTE=SlaterB]was genau ist dein Ziel?
ich kann nicht mehr als API lesen anbieten, aber die shutdown-Methode sollte doch alle ‘überzähligen Runnables noch ausgeführen’ bei Ende des Services?
…[/QUOTE]
In der API bin ich auch am lesen, ganz einfach: Mein Ziel ist es das kein Runnable verloren geht. Ich führe mit dem Programm größere Dateiopperationen aus und wenn bei einem Runnable der Fehler auftritt sollte es wieder in den Executor eingegliedert werden.

zur Sicherheit noch der Hinweis dass ich mir das auch so gedacht habe und mein vorheriges Posting dazu die umfassende Antwort sein sollte
(insbesondere der Link mit dem Handler der eben ‚wieder eingliedert‘)

falls du in irgendwas anderes als das wohlige Gefühl eines vollständig gelösten Problems fühlst, dann das bitte mitteilen :wink:

edit:

auf Fehler innerhalb der Runnable-Abarbeitung wird der RejectedExecutionHandler kaum reagieren, schätze ich,
aber kann man ja ausprobieren