Мне пришлось использовать тот же «CurrentThreadExecutorService» для целей тестирования, и, хотя все предложенные решения были хорошими (особенно то, которое упоминает способ Guava ), я придумал нечто похожее на то, что предложил здесь Питер Лоури .
Как отметил Аксель Ziegler здесь , к сожалению , решение Петра будет на самом деле не работает из - за проверки введенных в ThreadPoolExecutor
по maximumPoolSize
параметру конструктора (т.е. maximumPoolSize
не может быть <=0
).
Чтобы обойти это, я сделал следующее:
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);
}
};
}