我需要能够为当前正在运行的线程注入一些退出代码。我一直在努力与这一个了一段时间,我终于想出了一个解决方案在这里是一些代码类似于我在做什么:线程退出回调
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