Tive que usar o mesmo "CurrentThreadExecutorService" para fins de teste e, embora todas as soluções sugeridas fossem boas (principalmente aquela que mencionava o método Guava ), descobri algo semelhante ao que Peter Lawrey sugeriu aqui .
Conforme mencionado por Axelle Ziegler aqui , infelizmente a solução de Peter não funcionará de fato por causa da verificação introduzida no parâmetro ThreadPoolExecutor
do maximumPoolSize
construtor (ou seja, maximumPoolSize
não pode ser <=0
).
Para contornar isso, fiz o seguinte:
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);
}
};
}