使用定时器可以实现将来发生的事情进行计划执行。以下代码演示了过一段时间向Actor发送消息。
1.编写Actor
3.输出结果
1.编写Actor
在Actor中只是打印出接收到的消息
import akka.actor.UntypedActor;
import akka.event.Logging;
import akka.event.LoggingAdapter;
public class TestActor extends UntypedActor {
LoggingAdapter log = Logging.getLogger(getContext().system(), this);
public TestActor() {}
@Override
public void onReceive(Object msg ) throws Exception {
log.info("msg : " + msg);
}
}
2.测试类
import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import scala.concurrent.duration.Duration;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
/**
* 定时器Scheduler
*
* @author lcq
*
*/
public class System {
public static final Logger log = LoggerFactory.getLogger(System.class);
public static void main(String[] args) throws InterruptedException {
final ActorSystem actorSystem = ActorSystem.create("actor-system");
final ActorRef testActor = actorSystem.actorOf(Props.create(TestActor. class));
log.info( "1111111111");
// 在2秒后向testActor发送消息“haha”
actorSystem.scheduler().scheduleOnce(Duration.create(2000, TimeUnit. MILLISECONDS), new Runnable() {
public void run() {
testActor.tell("haha" , null);
}
}, actorSystem.dispatcher());
log.info( "2222222222");
Thread.sleep(5000);
log.debug( "Actor System Shutdown Starting..." );
actorSystem.shutdown();
}
}
3.输出结果
20:57:04.311 [main] INFO com.center.akka.scheduler.System - 1111111111
20:57:04.314 [main] INFO com.center.akka.scheduler.System - 2222222222
[INFO] [05/17/2015 20:57:06.335] [actor-system-akka.actor.default-dispatcher-3] [akka://actor-system/user/$a] msg : haha
20:57:09.314 [main] DEBUG com.center.akka.scheduler.System - Actor System Shutdown Starting...