public synchronized CompletableFuture<T> provide() {
		if (future == null) {
			future = new CompletableFuture<>();
			future.exceptionally((exc) -> {
				synchronized (this) {
					future = null;
				}
				return ExceptionUtils.rethrow(exc);
			});
		}
		return future;
	}
Provide the value out of band

If this is called before {@link #request()}, the computation given at construction is
ignored. A new {@link CompletableFuture} is returned instead. The caller must see to this
future's completion. Subsequent calls to either {@link #request()} or {@link #provide()}
return this same future without starting any computation.

Under normal circumstances, the caller cannot determine whethor or not is has "claimed" the
computation. If the usual computation is already running, then the computations are
essentially in a race. As such, it is essential that alternative computations result in the
same value as the usual computation. In other words, the functions must not differ, but the
means of computation can differ. Otherwise, race conditions may arise.

@return a promise that the caller must fulfill or arrange to have fulfilled
Ghidra/Framework/Generic/src/main/java/ghidra/async/AsyncLazyValue.java