しかし、アクター サブシステムが使用するスレッド プールを再利用するのは非常に簡単です。まず、サイズを制御できます。
-Dactors.maxPoolSize=8
そして、その上で作業を呼び出すことができます:
actors.Scheduler.execute( f ); //f is => Unit
欠けている唯一のものは、仕事をスケジュールする機能です。このために、シングル スレッドであり、アクター スレッド プールで作業を実行する別のスレッドScheduledExecutorServiceを使用します。
object MyScheduler {
private val scheduler = Executors.newSingleThreadedScheduledExecutorService
def schedule(f: => Unit, delay: (Long, TimeUnit)) : ScheduledFuture[_] = {
scheduler.schedule(new ScheduledRun(f), delay._1, delay._2)
}
private class ScheduledRun(f: => Unit) extends Runnable {
def run = actors.Scheduler.execute(f)
}
}
次に、これを使用して何でもスケジュールできます。
MyScheduler.schedule(f, (60, SECONDS))