public boolean getValueWithLocks() {
        if (!isInitialised) {
            synchronized (this) {
                if (!isInitialised) {
                    final boolean newVal = valueSupplier.getAsBoolean();
                    // Write order is important here due to volatile piggybacking
                    value = newVal;
                    isInitialised = true;
                    return newVal;
                }
            }
        }
        return value;
    }
@return The value, initialising it if required. If initialisation
is required synchronisation will be used to ensure the supplier is only
called once.
Use this method if supplier is not idempotent, has side effects or is
costly to run.
stroom-util/src/main/java/stroom/util/concurrent/LazyBoolean.java