@ApiStatus.Experimental
  public static <E extends Throwable>
  void run(@NotNull ThrowableRunnable<E> runnable, long threshold, @NotNull LongConsumer consumer) throws E {
    long startNanoTime = System.nanoTime();
    try {
      runnable.run();
    }
    finally {
      long duration = getDurationMillis(startNanoTime);
      if (duration >= threshold) consumer.accept(duration);
    }
  }
@ApiStatus.Experimental
  public static <E extends Throwable>
  void run(@NotNull ThrowableRunnable<E> runnable, long threshold, @NotNull LongConsumer consumer)