正如之前在这里多次提到的那样,您可以在actor内部生成一个新线程(将长时间处理的计算放入actor{}
块中),并且生成的计算将安全地在与actor调度程序使用相同的线程池上运行。
actor{
var i = 0
case msg => actor {
// computation
i = i + 1 // is `i` still thread safe?
// looks like it can be access simultaneosly from 2 two threads now
// should I make it @volatile?
}
reply(i)
}
然而,它是否是线程安全的,并且是否遵循原始设计,即一次只有一个线程可以使用一个actor?