如果我创建线程池大小为10的ExecutorService(使用newFixedThreadpool),并且最初只有5个任务正在运行,在这种情况下,ExecutorService创建10个线程,5个将是理想的,或者只创建5个线程。
在这种情况下,将在线程池中创建10个线程。然后将5个线程分配给任务。其他5个将等待新任务的出现。
除此之外,如果5个运行线程中的任何一个线程完成,它将返回到池中。
如果您使用ExecutorService.newFixedThreadpool(nThread)
,那么您将创建一个大小为nThread
的线程池。所有的线程都会创建,没事就闲置。
ExecutorSerivce使用以下参数创建ThreadPoolExecutor
的构造函数:
corePoolsize
是nThread
最大池大小
是nThread
保持AliveTime
为0
Unit
是TimeUnit。MILLISECONDS
workQueue
是一个未绑定的队列LinkedBlockingQueue
整数。MAX_VALUE
,正常的程序不应该达到)如果您不希望这样,则必须自己创建ThreadPoolExecutor
。
请注意,您必须使用具有上限的队列
(当您正常运行软件时实际达到上限),否则不会创建新的线程
-因为只有当队列已满时才会发生。
JavaExecutorService框架允许您使用托管线程池委托要执行的多个任务,以便一次可以执行N个任务X个任务,直到完成。 我的问题是。。。如果N是一个无限大的数字,或者太大以至于最初无法分配/分配/定义,该怎么办。 如何利用Java(ExecutorService)中的线程池概念来处理比合理提交更多的任务,而不会耗尽资源。 为了回答这个问题,假设每个任务都是自包含的,不依赖于任何其他任务,
我已经使用ExecutorService实现了超时任务。在下面的方法中,我正在提交超时任务,如果它在给定的时间内超时,我将取消该任务并关闭执行器。 它运行得很好,我没有任何问题。 然而,我想知道这是否是最好的代码设计。我只是想知道如果使用ExecutorService返回的未来是否会更好。submit()获取可调用函数的返回值或超时超时任务。例如 我正在使用JDK7。
是否有一个实现,其行为类似具有以下特性的线程池? 始终至少有X个活动线程。 相当标准的线程池行为。你可能会认为ThreadPoolExecator可以处理这个问题,但是 如果提交了10个以上的任务,将引发异常。切换到永远不会超过两个最小线程,除非您限制像
每次我们启动spring云任务时,它都会启动一个新的jvm(java.exe),所以如果启动了25个任务,那么它就会启动25个jvm。 我想知道如何同时限制所有任务(为所有部署的JAR运行)的总数? 假设我必须将一次运行的所有任务的总数限制为25个。在SCDF中有什么设置我们可以做到这一点吗? 请让我知道