我想在创建Actor系统时将Java中的ExecutorService对象的引用作为默认的dispatcher / executionContext传递。有没有一种方法可以做到,而不是从config中读取调度程序属性。
答案 0 :(得分:1)
使用ActorSystem
作为参数的ExecutionContext
工厂方法create
。这是方法签名和Javadoc(重点是我的):
public static ActorSystem create(java.lang.String name,
com.typesafe.config.Config config,
java.lang.ClassLoader classLoader,
scala.concurrent.ExecutionContext defaultExecutionContext)
使用指定的名称,指定的Config,指定的ClassLoader和指定的ExecutionContext创建一个新的ActorSystem。 ExecutionContext将用作此ActorSystem中的默认执行程序。如果为Config,ClassLoader和/或ExecutionContext参数传递了
null
,则将使用各自的默认值。如果未提供配置,则将从ClassLoader获取默认参考配置。如果未提供ClassLoader,它将通过首先检查当前线程的getContextClassLoader来获取当前的ClassLoader,然后尝试遍历堆栈以找到调用方的类加载器,然后退回到与ActorSystem类关联的ClassLoader。如果未提供ExecutionContext,则系统将回退到在“ akka.actor.default-dispatcher.default-executor.fallback”下配置的执行程序。请注意,给定的ExecutionContext将由已配置executor =“ default-executor”的所有调度程序使用,包括那些尚未定义executor设置的调度程序,从而回退到默认值“ default-dispatcher.executor”。>
例如:
import scala.concurrent.ExecutionContext;
final ExecutionContext ec = ...
ActorSystem system = ActorSystem.create("MySystem", null, null, ec);