@Obsolete
  public static <E extends Throwable> void withLock(@NotNull Lock lock, @NotNull ThrowableRunnable<E> runnable) throws E {
    lock.lock();
    try {
      runnable.run();
    }
    finally {
      lock.unlock();
    }
  }
@Obsolete
  public static <E extends Throwable> void withLock(@NotNull Lock lock, @NotNull ThrowableRunnable<E> runnable)