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