@Override
  public <T, E extends Throwable> T computePrioritized(@NotNull ThrowableComputable<T, E> computable) throws E {
    Thread thread = Thread.currentThread();
    boolean prioritize;
    if (isCurrentThreadPrioritized()) {
      prioritize = false;
    }
    else {
      prioritize = true;
      if (myPrioritizedThreads.isEmpty()) {
        myPrioritizingStartedNanos = System.nanoTime();
      }
      changePrioritizing(()->myPrioritizedThreads.add(thread));
    }
    try {
      return computable.compute();
    }
    finally {
      if (prioritize) {
        changePrioritizing(()->myPrioritizedThreads.remove(thread));
      }
    }
  }
@Override
  public <T, E extends Throwable> T computePrioritized(@NotNull ThrowableComputable<T, E> computable)