public void setTimeoutManager(TimeoutManager timeoutManager) {
        Objects.requireNonNull(timeoutManager, "timeoutManager");
        synchronized (monitor) {
            if (this.timeoutManager != null) {
                throw new IllegalStateException("Timeout manager already set.");
            }
            this.timeoutManager = timeoutManager;
            if (timeout != null) {
                timeoutManager.scheduleTimeout(this);
            }
        }
    }
<p>Sets a {@link TimeoutManager} to be called when {@link #setTimeout(long, TimeUnit)} is invoked. If a timeout
has already been set for this Request, the TimeoutManager is called before returning. This method will throw an
IllegalStateException if it has already been called.</p>

<p><b>NOTE:</b> This is used by the default timeout management implementation, so unless you are replacing that
mechanism you should avoid calling this method. If you <em>do</em> want to replace that mechanism, you need to
call this method prior to calling the target {@link RequestHandler} (since that injects the default manager).</p>

@param timeoutManager The manager to set.
@throws NullPointerException  If the TimeoutManager is null.
@throws IllegalStateException If another TimeoutManager has already been set.
@see #getTimeoutManager()
@see #setTimeout(long, TimeUnit)
jdisc_core/src/main/java/com/yahoo/jdisc/Request.java