アクター内からスレッドを実行しているオブジェクトをシャットダウンする最善の方法は何ですか? 最善の戦略が何であるかわかりませんか?
ほとんどのトピックは、すべてにスレッドを使用するという考えを中心に展開しているようですが、私はブロッキング IO を行っており、サードパーティのコードを書き直すオプションはありません ;)
特に注意すべき点はありますか?
アクター内からスレッドを実行しているオブジェクトをシャットダウンする最善の方法は何ですか? 最善の戦略が何であるかわかりませんか?
ほとんどのトピックは、すべてにスレッドを使用するという考えを中心に展開しているようですが、私はブロッキング IO を行っており、サードパーティのコードを書き直すオプションはありません ;)
特に注意すべき点はありますか?
意味がよくわからないので、的外れだったらすみません。いくつかのActor
クラスA
があり、その状態の一部として、別のスレッドを実行させるサードパーティ API であるオブジェクトがあります (そして、それにコールバックを発行しますか?)
class A extends Actor {
val api = { ... }
def act() = { ... }
}
アクターのインスタンスをシャットダウンしたいのですが、によって作成されたスレッドがどうなるのかA
心配です。api
サードパーティ API がクリーンに破棄するメカニズムapi
(destroy
メソッドなど) を提供している場合は、それを呼び出すだけです。または、明示的な kill シグナルをアクターに送信し、正常に終了させます。
case 'Kill => api.destroy(); self.exit()
API がそのようなメカニズムを提供していない場合は、少し行き詰っています (さらに、これはひどい API であると付け加えるかもしれません)。アクターをシャットダウンできますが、別のスレッドは実行されたままになります。もちろん、それはデーモンスレッドである可能性があるため、JVM 全体の正常なシャットダウンを妨げるものではありません。それ以外の場合、プログラムを正常に終了する唯一の方法は、sys.exit(0)
適切な場所から明示的に呼び出すことです。