String className = "java.lang.ApplicationShutdownHooks"; Class<?> clazz = Class.forName(className); Field field = clazz.getDeclaredField("hooks"); field.setAccessible(true); Thread shutdownThread = new Thread(new Runnable() { @Override public void run() { // TODO } }); shutdownThread.setName("My-WebShutdownThread"); IdentityHashMap<Thread, Thread> excludeIdentityHashMap = new ExcludeIdentityHashMap<>(); excludeIdentityHashMap.put(shutdownThread, shutdownThread); synchronized (clazz) { IdentityHashMap<Thread, Thread> map = (IdentityHashMap<Thread, Thread>) field.get(clazz); for (Thread thread : map.keySet()) { Log.info("found shutdownHook: " + thread.getName()); excludeIdentityHashMap.put(thread, thread); } field.set(clazz, excludeIdentityHashMap); }