Akka介绍
http://blog.csdn.net/liubenlong007/article/details/53782966
Actor介绍
在使用Akka进行并行程序开发时,我们的关注点不在线程,因为线程调度已经被Akka框架进行封装,我们关注一个全新的执行单元,就是Actor,Actor对象之间的交流和一般的对象的函数调用不一样,它们是通过显示的消息发送来传递信息的
hello world
1、第一个Actor的实现
继承UntypedActor,注意这个是无类型的
public class Greeter extends UntypedActor{
//消息类型:欢迎、完成
public static enum Msg{
Greet,DONE;
}
@Override
public void onReceive(Object msg) throws Exception {
if(msg==Msg.Greet){ //当收到GREET消息时,打印"Hello World"
System.out.println("Hello World");
getSender().tell(Msg.DONE, getSelf());//,并向消息发送方发送DONE信息
}else
{
unhandled(msg);//没有收到就不处理
}
}
}
2、与Greeter交流的另一个Actor:HelloWorld
public class HelloWorld extends UntypedActor{
ActorRef greeter;
//该方法在Actor启动前,会被Akka框架调用,完成初始化的工作
@Override
public void preStart() throws Exception {
//使用HelloWorld上下文创建Greeter的实例
greeter=getContext().actorOf(Props.create(Greeter.class),"greeter");
System.out.println("Greeter Actor Path:"+greeter.path());
greeter.tell(Greeter.Msg.Greet, getSelf());
}
@Override
public void onReceive(Object msg) throws Exception {
if(msg==Greeter.Msg.DONE){
//当收到DONE消息,再给greeter发送Greeter消息,然后将自己停止
greeter.tell(Greeter.Msg.Greet, getSelf());
getContext().stop(getSelf());
}else{
unhandled(msg);
}
}
}
主函数
创建了ActorSystem ,表示管理和维护Actor的系统,ActorSystem.create( )第一个参数”Hello”是系统名称,第二个参数是配置文件
public class HelloMainSimple {
public static void main(String[] args) {
ActorSystem system=ActorSystem.create("Hello",ConfigFactory.load("samplehello.conf"));
ActorRef a=system.actorOf(Props.create(HelloWorld.class),"helloWorld");
System.out.println("HelloWorld Actor Path:"+a.path());
}
}
注意不要在Actor内执行耗时操作,这样会导致其他Actor的调度出现问题
参考:《Java高并发程序设计》