1
我的应用程序最终通过Actors做了大量的后台处理,特别是加载Mapper实例,然后对它们做一些工作。这是非常重复的,我想在我的Actor代码中缓存一些这些查找。如何安全地在Actor中使用ThreadLocal缓存?
我通常会为此使用ThreadLocal。但是,由于线程初始化是由Actor线程池处理的,所以似乎只有初始化并随后清除ThreadLocal的地方才会在actor的PartialFunction中接收传入消息。
我现在正在做的是在我的演员创造另一种方法,就像这样:
override def aroundUpdates[T](fn: => T) : T = {
clientCache.init {
fn
}
}
凡init
方法处理在finally块清理ThreadLocal的。我不喜欢这种方法,因为aroundUpdates只是为了设置缓存而存在,它闻起来像是一种代码味道。
有没有更好的方法来做到这一点?
感谢您的回复。我得出的结论是我的设计太复杂了(一组调用方法超出了他们的定义范围)并需要清理。 – Collin 2010-11-04 18:45:30