1

私のアクターの反応メソッドの 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

スレッド プールのサイズを 1 に減らし、スレッドを 1 つだけ表示したいので、次のように渡します。

だから私は渡します:

-Dactors.maxPoolSize=1 

VM 引数として。

私の予想では、スレッドは 1 つしか表示されないはずですが、まだ負荷が表示されています。何か案は?

4

1 に答える 1

2

短い答え

でVMを実行してみてください

-Dactors.corePoolSize=1

説明

ForkJoinScheduler、Java 1.6以降を実行しているほとんどのOSのデフォルトのスケジューラであり、DrainableForkJoinPoolアンダーを使用してカバーします。これは、私が知る限り、maxPoolSizeプロパティを無視します。makeNewPoolのメソッドForkJoinSchedulerとのコンストラクタを参照してくださいDrainableForkJoinPool

于 2013-01-31T16:44:21.770 に答える