public void runUntil(Instant stopTime) {
    runUntil(() -> Instant.now().isAfter(stopTime));
  }
Keeps CPUs busy by searching for probable primes.

<h3>Lifecycle</h3>

1: Initializing the contention service

<p>
The constructor creates an executor service with the specified number of threads. Initially, the
threads are idle.

<p>
The executor service remains active until you call {@code shutDown()}.

<p>
2: Starting contention

<p>
Each of these methods starts all threads executing, each contending for CPUs.
<ul>
<li>{@link #runFor(Duration)}</li>
<li>{@link #runUntil(Instant)}</li>
<li>{@link #runUntil(BooleanSupplier)}</li>
<li>{@link #runUntilStopped()}</li>
</ul>

<p>
3: Stopping contention

<p>
If you call {@code runUntilStopped()}, the threads remain active until you call {@code stop()}.

<p>
Each of the other methods will stop the threads when the specified condition is satisfied.

<p>
Stopping the threads does not shut down the underlying thread pool executor.

<p>
4: Shutting down the contention service

<p>
When you're done with this service, you must call {@code shutDown(duration)} to close the thread
pool.
geode-junit/src/main/java/org/apache/geode/test/concurrent/CPUContentionService.java