現在実行中のスレッドの終了コードを注入できる必要があります。私はしばらくの間、このいずれかで苦労している、と私は最終的にここに解決策を考え出した私がやっているものと同様のいくつかのコードです:スレッド終了コールバック
public static void injectThreadExitCallback(final Runnable callback) {
final curr = Thread.currentThread();
new Thread() {
@Override
public void run() {
try {
curr.join();
callback.run();
} catch (InterruptedException ex) {
... logging ...
}
}
}.start();
}
正常に動作するようですし、私が望んだまさに行い、私の唯一の関心事は、これは漏れや他の望ましくない副作用を引き起こす場合、私は見ていないかもしれないことです。
これは完全に問題ありませんが、これは非常に便利です。私は、既存のスレッドに終了コードを動的に追加できる単純なライブラリを見ることができました。
よく見えます。コールバックは別のスレッドで実行されることに注意してください。 –
コールバックを 'finally'ブロックに移動すると、' join'がターゲットスレッドが終了する*前に発生する例外をスローすると実行されます。また、一部の外部エージェントがすべてのスレッドを中断しない限り、joinは例外をスローしません。 –
このメソッド内で作成した匿名スレッドが中断された場合、コールバックを呼び出す必要があるかどうかは非常に疑問です。スレッドを中断するポイントは、スレッドが何をしているのかを止めることです。このスレッドが実行している唯一のことは、コールバックを呼び出すのを待っているため、コールバックが実行されないようにすることができます。 –