Java:关闭钩子中的线程

Java:关闭钩子中的线程,java,multithreading,shutdown,shutdown-hook,Java,Multithreading,Shutdown,Shutdown Hook,我有一个管理器类,它允许子模块使用Runnable注册关闭挂钩 public class ApplicationManager() { private final List<Runnable> shutdownHooks; private ApplicationManager() { // Other stuff Runtime.getRuntime().addShutdownHook(new Thread(() -> {

我有一个管理器类,它允许子模块使用
Runnable
注册关闭挂钩

public class ApplicationManager() {
    private final List<Runnable> shutdownHooks;

    private ApplicationManager() {
        // Other stuff

        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
            if (shutdownHooks != null && !shutdownHooks.isEmpty()) {
                shutdownHooks.parallelStream()
                             .forEach(Runnable::run);
            }
        }));
    }

    // Other singleton stuff

    public void registerShutdownHook(final Runnable hook) {
        if (hook != null) {
            this.shutdownHooks.add(hook);
        }
    }

    public void resetApplication() {
        // Reset stuff

        shutdownHooks.parallelStream()
                     .forEach(Runnable::run);
        shutdownHooks.clear();
    }
}
公共类应用程序管理器(){
私人最终关闭清单;
专用应用程序管理器(){
//其他东西
Runtime.getRuntime().addShutdownHook(新线程(()->{
if(shutdownHooks!=null&&!shutdownHooks.isEmpty()){
shutdownHooks.parallelStream()
.forEach(Runnable::run);
}
}));
}
//其他单身的东西
公共无效注册表挂起(最终可运行挂起){
if(hook!=null){
this.shutdownHooks.add(hook);
}
}
公共应用程序(){
//重置内容
shutdownHooks.parallelStream()
.forEach(Runnable::run);
关闭挂钩。清除();
}
}
此类不接受
registerShutdownHook()
中的
Thread
实例的原因主要是为了降低调用方的复杂性(因此它们不需要包装在
Thread
的实例中)

可以重置应用程序,我希望通过执行所有关闭挂钩来清理应用程序。虽然,我可以用
线程
包装每个
Runnable
,在
registerShutdownHook()
期间将它们全部注册到
运行时
,并在调用
resetApplication()
时将它们从
运行时
中删除,但我认为控制需要运行的内容可能更简洁

为了在清理过程中加快速度,我使用了
parallelStream()
。现在我想知道这是否是一个坏主意(在关机挂钩期间):

  • 使用线程池
  • 或者,创建更多线程

  • 任何有足够经验的人都可以给出建议吗?

    如果某些钩子依赖于其他钩子和/或访问共享变量而不依赖其他钩子,那么并行执行可能会出现一些问题synchronization@Ivan除此之外,这不会引起任何问题吗?