我需要能夠爲當前正在運行的線程注入一些退出代碼。我一直在努力與這一個了一段時間,我終於想出了一個解決方案在這裏是一些代碼類似於我在做什麼:線程退出回調
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();
}
這似乎很好地工作和做我想要什麼,我唯一擔心的是,如果這導致任何泄漏或其他不良副作用,我可能不會看到。
或者這是非常好的,如果是這樣,這是非常有用的。我可以看到一個簡單的庫,可以動態地將退出代碼添加到現有的線程。
看起來不錯;請注意,回調將在單獨的線程上運行。 – 2013-02-08 20:15:40
將回調移動到'finally'塊意味着如果'join'在目標線程退出之前拋出一個將會發生的異常,它就會運行。此外,除非某個外部代理開始中斷所有線程,否則連接永遠不會拋出異常。 – 2013-02-08 20:44:55
如果您在此方法內創建的匿名線程中斷,那麼回調是否應該被調用是非常值得懷疑的。中斷一個線程的目的是停止它正在做的事情。由於這個線程唯一做的就是等待調用回調函數,所以中斷它的唯一原因就是阻止回調函數的運行。 – 2013-02-08 20:53:58