1

在我的一个演员反应方法中,我通过执行以下操作输出线程池:

val scalaThreadSet = asScalaSet(Thread.getAllStackTraces().keySet());
scalaThreadSet.foreach(element => Console.println("Thread=" + element + ",state=" + 
                    element.getState())) 

我看到一堆线程:

Thread=Thread[ForkJoinPool-1-worker-6,5,main],state=WAITING
Thread=Thread[Signal Dispatcher,9,system],state=RUNNABLE
Thread=Thread[ForkJoinPool-1-worker-10,5,main],state=RUNNABLE
Thread=Thread[ForkJoinPool-1-worker-13,5,main],state=WAITING
Thread=Thread[ForkJoinPool-1-worker-7,5,main],state=WAITING
Thread=Thread[ForkJoinPool-1-worker-9,5,main],state=WAITING
Thread=Thread[ForkJoinPool-1-worker-14,5,main],state=WAITING

我希望将线程池的大小减少到一个并且只看到一个线程,所以我传入:

所以我传入:

-Dactors.maxPoolSize=1 

作为VM参数。

我的期望是我现在应该只看到一个线程,但我仍然看到负载。有任何想法吗?

4

1 回答 1

2

简短的回答

尝试运行虚拟机

-Dactors.corePoolSize=1

解释

是大多数运行 Java 1.6 或更高版本的操作系统的ForkJoinScheduler默认调度程序,它使用DrainableForkJoinPoolunder 来覆盖,据我所知,它忽略了该maxPoolSize属性。请参阅 的方法makeNewPoolForkJoinScheduler构造函数DrainableForkJoinPool

于 2013-01-31T16:44:21.770 回答