【发布时间】:2016-06-01 02:53:48
【问题描述】:
我已经开始使用 Akka 与并发程序做异步:
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
import akka.actor.UntypedActor;
public class TestAkka {
public static void main(String[] args) throws InterruptedException {
ActorSystem as1 = ActorSystem.create("actor1");
ActorRef ar1 = as1.actorOf(Props.create(Hello.class));
System.out.println("Start to say hello!");
ar1.tell("Bob", ActorRef.noSender());
ar1.tell("John", ActorRef.noSender());
System.out.println("Finish to say hello!");
}
public static class Hello extends UntypedActor {
@Override
public void onReceive(Object message) throws Exception {
if (message instanceof String) {
System.out.println("Hello " + message);
Thread.sleep(10000); // <--Sim the job take a short time
}
}
}
}
我执行上面的程序,系统必须一个一个完成(非并发):
ar1.tell("Bob", ActorRef.noSender());
ar1.tell("John", ActorRef.noSender());
所以结果是:
Hello Bob
(Wait 5 seconds)
Hello John
(Wait 5 seconds)
我想让它们并发,如何处理?我希望 Akka 应该自动处理它:) 感谢您的想法!
【问题讨论】:
-
我不确定我是否理解您的问题。任何时候只有一个线程可以执行给定的actor。
-
澄清问题
-
@JosephStyons 请让他们编辑澄清。
-
@SotiriosDelimanolis 承认。抱歉有任何混淆。这个感觉就像一个很好的问题被埋在某个地方..
-
@JosephStyons 我的意思是,我假设了同样的事情,但是在编辑时,我们不应该做出可能改变问题含义的更改。
标签: java asynchronous akka