我有一个需要线程池的任务,每个任务需要以与调用相同的顺序执行。因此,我使用了akka演员,但是它没有达到我的预期,所以我进行了测试。 这是我的代码:
@Test
def actorTest1(): Unit = {
for (i <- 1 to 300) {
val actorRef: ActorRef = actorFactory.createActor("myActor")
actorRef ! Tell(i)
}
Thread.sleep(6000000)
}
@Test
def actorTest2(): Unit = {
val actorRef: ActorRef = actorFactory.createActor("myActor")
for (i <- 1 to 300) {
actorRef ! Tell(i)
}
Thread.sleep(6000000)
}
case tell: Tell => {
Thread.Sleep(900)
log.debug("tell: " + tell.i)
}
test1的日志,其顺序不是1,2,3,4,5 ...,具有不同的线程;如果test2是1,2,3,4,5 ...,但是test2总是使用相同的线程。我希望它能正常工作,因为日志是具有不同线程的序列,例如:
2018-11-22 20:13:19.280 DEBUG 14176 --- [thread-1] : tell: 70
2018-11-22 20:13:19.857 DEBUG 14176 --- [thread-2] : tell: 71
2018-11-22 20:13:20.362 DEBUG 14176 --- [thread-3] : tell: 72
2018-11-22 20:13:20.823 DEBUG 14176 --- [thread-4] : tell: 73