2009-11-25 159 views
4

場景:我有這樣的代碼:垃圾回收斯卡拉演員

class MyActor extends Actor { 
    def act() { 
    react { 
     case Message() => println("hi") 
    } 
    } 
} 

def meth() { 
    val a = new MyActor 
    a.start 
    a ! Message() 
} 

是MyActor比如垃圾回收?如果不是,我如何確保它是?如果我創建了一個特別演員(用「演員」方法),那麼演員是誰?

回答

3

This threadscala-user mailing list是相關的。

還有Phillip Haller提到使用特定的調度程序(可在Scala 2.8中獲得)在垃圾收集之前終止Actor,無論是在全局還是每個角色的基礎上。

1

您是否嘗試過添加finalize方法來查看它是否是?我認爲這裏的答案是actors子系統的行爲與你期望的不同:它不會緩存任何對你的參與者的引用,除非在處理持續時間內在線程本地。

因此,我會期望你的演員是一個集合的候選人(假設該子系統在演員處理完其確實看起來在Reaction.run方法中出現的消息後正確地清除了ThreadLocal引用)。