Java 限制GPAR中的线程数?
我用于执行后台任务的并行进程。我使用以下服务启动一个新的后台线程Java 限制GPAR中的线程数?,java,spring,grails,grails-2.0,gpars,Java,Spring,Grails,Grails 2.0,Gpars,我用于执行后台任务的并行进程。我使用以下服务启动一个新的后台线程 要保存堆内存,如何限制后台线程的数量 如何定义由n个线程组成的线程池来处理后台任务 import jsr166y.ForkJoinPool class TaskService { private pool = new ForkJoinPool() def executeAsync(args, closure = null) { if(!closure) { closure = args
import jsr166y.ForkJoinPool
class TaskService {
private pool = new ForkJoinPool()
def executeAsync(args, closure = null) {
if(!closure) {
closure = args
args = null
}
GParsPool.withExistingPool(pool) {
closure.callAsync(args)
}
}
}
我说得对吗?服务是单例的,所以我的应用程序只有一个实例。
pool=new ForkJoinPool()
是否只实例化一次
我不是grails专家:-)。我只能说,每次实例化Java类ForkJoinPool
时,您都在创建一个新的池
当我使用
pool=newforkjoinpool(4)
并调用taskService时。从我的应用程序执行同步(…)
5次。在这种情况下会发生什么?是从4个线程执行5个任务,还是执行4个任务并阻止最后一个任务
这取决于任务做什么。fork/join池的基本思想是,当工作线程到达阻塞线程的点时,它将切换到另一个任务。它仅在没有可以完成的工作时阻塞线程
因此,在您的示例中,前4个任务应该启动,并继续运行,直到其中一个任务阻塞。如果发生这种情况,第五项任务将开始。我做对了吗?一个服务是Singleton,所以我的应用只有一个实例。pool=new ForkJoinPool()是否只实例化一次?当我使用pool=new ForkJoinPool(4)并调用taskService时。从我的应用程序执行同步(…)5次。在这种情况下会发生什么?这5个任务是从4个线程执行,还是执行4个任务并阻止最后一个任务?默认情况下,Grails服务是Singleton: