我使用几乎默认的newCachedThreadPool,但我想限制线程创建,所以我像这样创建ExecutorService
阅读了javadocs后,我希望当我提交Runnable时,任务执行器会以这样的方式工作:当向同步队列提供新任务时,任务执行器会阻塞,直到有可用线程来执行它,然后进行交接。但不幸的是,在达到线程池容量且所有线程都繁忙时,任务执行器会抛出RejectedExecutionException异常。我知道我可以传递一个RejectedExecutionHandler来阻塞,但我很惊讶似乎我必须这样做。请问是否真的按照预期工作,或者我做错了什么?
以下是代码示例:
new ThreadPoolExecutor(0, Runtime.getRuntime().availableProcessors() * 2,
60L, TimeUnit.SECONDS,
new SynchronousQueue<>());
阅读了javadocs后,我希望当我提交Runnable时,任务执行器会以这样的方式工作:当向同步队列提供新任务时,任务执行器会阻塞,直到有可用线程来执行它,然后进行交接。但不幸的是,在达到线程池容量且所有线程都繁忙时,任务执行器会抛出RejectedExecutionException异常。我知道我可以传递一个RejectedExecutionHandler来阻塞,但我很惊讶似乎我必须这样做。请问是否真的按照预期工作,或者我做错了什么?
以下是代码示例:
public static void main(String[] args) {
ThreadPoolExecutor executor = new ThreadPoolExecutor(0, Runtime.getRuntime().availableProcessors() * 2,
60L, TimeUnit.SECONDS,
new SynchronousQueue<>());
while (true) {
executor.submit(() -> System.out.println("bla"));
}
}