J'ai dû utiliser le même "CurrentThreadExecutorService" à des fins de test et, bien que toutes les solutions suggérées soient intéressantes (en particulier celle mentionnant la méthode Guava ), j'ai trouvé quelque chose de similaire à ce que Peter Lawrey a suggéré ici .
Comme mentionné par Axelle Ziegler ici , malheureusement, la solution de Peter ne fonctionnera pas réellement à cause de la vérification introduite dans ThreadPoolExecutor
le maximumPoolSize
paramètre du constructeur (c'est maximumPoolSize
-à- dire impossible <=0
).
Afin de contourner cela, j'ai fait ce qui suit:
private static ExecutorService currentThreadExecutorService() {
CallerRunsPolicy callerRunsPolicy = new ThreadPoolExecutor.CallerRunsPolicy();
return new ThreadPoolExecutor(0, 1, 0L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>(), callerRunsPolicy) {
@Override
public void execute(Runnable command) {
callerRunsPolicy.rejectedExecution(command, this);
}
};
}