在Java中为Actor系统设置默认的ExecutionContext

时间:2018-07-29 19:50:31

标签: java akka

我想在创建Actor系统时将Java中的ExecutorService对象的引用作为默认的dispatcher / executionContext传递。有没有一种方法可以做到,而不是从config中读取调度程序属性。

1 个答案:

答案 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);