テストの目的で同じ "CurrentThreadExecutorService"を使用する必要があり、提案されたすべての解決策(特にGuavaの方法に言及している解決策)は優れていましたが、Peter Lawreyがここで提案したものに似たものを思いつきました。
ここでAxelle Zieglerが述べたように、残念ながら、Peterのソリューションは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);
}
};
}