Saya harus menggunakan "CurrentThreadExecutorService" yang sama untuk tujuan pengujian dan, meskipun semua solusi yang disarankan bagus (terutama yang menyebutkan cara Guava ), saya menemukan sesuatu yang mirip dengan apa yang disarankan Peter Lawrey di sini .
Seperti yang disebutkan oleh Axelle Ziegler di sini , sayangnya solusi Peter tidak benar-benar berfungsi karena cek yang dimasukkan ThreadPoolExecutor
pada maximumPoolSize
parameter konstruktor (yaitu maximumPoolSize
tidak dapat<=0
).
Untuk menghindari itu, saya melakukan hal berikut:
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);
}
};
}