0

关闭一个对象的最佳方法是什么,该对象本身正在从一个 Actor 内部运行一个线程。我不确定最好的策略是什么?

大多数主题似乎都围绕着对所有事情都使用线程的想法,但我正在做阻塞 IO,它不是重写第 3 方代码的选项;)

有什么特别需要注意的吗?

4

1 回答 1

3

不清楚你的意思是什么,所以如果我有错误的一端,请道歉。你有一些Actorclass A,它有一个作为其状态的一部分的对象,它是一些 3rd-party API,它导致一个单独的线程运行(并且可能向它发出回调?)

class A extends Actor {
  val api = { ... }
  def act() = { ... }
}

您希望关闭您的演员的一个实例,A并且您关心由创建的线程api以及它会发生什么?

如果您的第三方 API 提供了某种机制来干净地处理api(例如destroy方法),那么只需调用它!或者向actor发送一个明确的终止信号并让它优雅地退出:

  case 'Kill => api.destroy(); self.exit()

如果 API 没有提供这样的机制,那么你会有点卡住(我可能会补充说,这是一个糟糕的 API)。您可以关闭您的演员,但单独的线程将继续运行。当然,它可能是一个守护线程,因此不会阻止整个 JVM 正常关闭。否则,优雅退出程序的唯一方法是sys.exit(0)从某个适当的位置显式调用。

于 2012-06-25T23:00:52.510 回答