2009-11-25 114 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引用)。