org.apache.hadoop.util
ShutDownHookManager
1.ShutDownHookManager 单例模式
2.getShutdownHooksInOrder()
内部类 HookEntry 有两个成员变量,hook(Runnable), priority(int)
此方法按priority 优先级排序(优先级大的再前面),返回List<Runnable>
3.最后ShutDown 则会按顺序执行Runnbale 中的run
static {
Runtime.getRuntime().addShutdownHook(
new Thread() {
@Override
public void run() {
MGR.shutdownInProgress.set(true);
for (Runnable hook: MGR.getShutdownHooksInOrder()) {
try {
hook.run();
} catch (Throwable ex) {
LOG.warn("ShutdownHook '" + hook.getClass().getSimpleName() +
"' failed, " + ex.toString(), ex);
}
}
}
}
);
}
4. private AtomicBoolean shutdownInProgress = new AtomicBoolean(false);
private Set<HookEntry> hooks = Collections.synchronizedSet(new HashSet<HookEntry>());
(list = new ArrayList<HookEntry>(MGR.hooks);)