@Override
    public void start() throws Exception {
        if (refreshExecutorService == null) {
            LOGGER.info("Initialising RefreshManager executor");
            refreshExecutorService = Executors.newSingleThreadExecutor();
            refreshExecutorService.submit(() -> {
                final Thread currentThread = Thread.currentThread();
                LOGGER.debug(() -> "Started RefreshManager on thread " + currentThread.getName());
                isStarted.set(true);
                while (!currentThread.isInterrupted() && !isShutdownInProgress.get()) {
                    consumeFromQueue();
                }
                LOGGER.info(() -> LogUtil.message(
                        "RefreshManager refresh thread {} finishing (isInterrupted: {}, isShutdownInProgress: {})",
                        currentThread.getName(), currentThread.isInterrupted(), isShutdownInProgress.get()));
            });
        }
    }
Register the refreshable so that its refreshing gets managed. Can be called many times
for the same {@link Refreshable}, e.g. to notify the {@link RefreshManager} that it was
refreshed externally.
stroom-security/stroom-security-common-impl/src/main/java/stroom/security/common/impl/RefreshManager.java