public static <K, V> RemovalListener<K, V> asynchronous(
      final RemovalListener<K, V> listener, final Executor executor) {
    checkNotNull(listener);
    checkNotNull(executor);
    return new RemovalListener<K, V>() {
      @Override
      public void onRemoval(final RemovalNotification<K, V> notification) {
        executor.execute(
            new Runnable() {
              @Override
              public void run() {
                listener.onRemoval(notification);
              }
            });
      }
    };
  }
public static <K, V> RemovalListener<K, V> asynchronous(
      final RemovalListener<K, V> listener, final Executor executor) {
    checkNotNull(listener);
    checkNotNull(executor);
    return new RemovalListener<K, V>() {
      @Override
      public void onRemoval(final RemovalNotification<K, V> notification) {
        executor.execute(
            new Runnable() {
              @Override
              public void run() {
                listener.onRemoval(notification);
              }
            });
      }
    };
  }
public static < K , V > RemovalListener < K , V > asynchronous ( final RemovalListener < K , V > listener , final Executor executor ) { checkNotNull ( listener ) ; checkNotNull ( executor ) ; return new RemovalListener < K , V > ( ) { @ Override public void onRemoval ( final RemovalNotification < K , V > notification ) { executor . execute ( new Runnable ( ) { @ Override public void run ( ) { listener . onRemoval ( notification ) ; } } ) ; } } ; }
Returns a {@code RemovalListener} which processes all eviction notifications using {@code
executor}.

@param listener the backing listener
@param executor the executor with which removal notifications are asynchronously executed
Returns a { @code RemovalListener } which processes all eviction notifications using { @code executor } .