com.google.common.util.concurrent.SettableFuture.addListener()方法的使用及代码示例

x33g5p2x  于2022-01-29 转载在 其他  
字(9.1k)|赞(0)|评价(0)|浏览(108)

本文整理了Java中com.google.common.util.concurrent.SettableFuture.addListener()方法的一些代码示例,展示了SettableFuture.addListener()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。SettableFuture.addListener()方法的具体详情如下:
包路径:com.google.common.util.concurrent.SettableFuture
类名称:SettableFuture
方法名:addListener

SettableFuture.addListener介绍

暂无

代码示例

代码示例来源:origin: prestodb/presto

public ListenableFuture<T> createNewListener()
{
  SettableFuture<T> listener = SettableFuture.create();
  synchronized (listeners) {
    listeners.add(listener);
  }
  // remove the listener when the future completes
  listener.addListener(
      () -> {
        synchronized (listeners) {
          listeners.remove(listener);
        }
      },
      directExecutor());
  return listener;
}

代码示例来源:origin: prestodb/presto

public Partition(
    int consumersCount,
    int partitionNumber,
    IntFunction<ListenableFuture<T>> loader,
    ListenableFuture<?> previousReleased,
    IntConsumer disposer)
{
  this.partitionNumber = partitionNumber;
  this.requested = SettableFuture.create();
  this.loaded = Futures.transformAsync(
      allAsList(requested, previousReleased),
      ignored -> loader.apply(partitionNumber),
      directExecutor());
  this.released = SettableFuture.create();
  released.addListener(() -> disposer.accept(partitionNumber), directExecutor());
  this.pendingReleases = consumersCount;
}

代码示例来源:origin: prestodb/presto

public synchronized ListenableFuture<?> waitForMinimumWorkers()
{
  if (currentCount >= executionMinCount) {
    return immediateFuture(null);
  }
  SettableFuture<?> future = SettableFuture.create();
  futures.add(future);
  // if future does not finish in wait period, complete with an exception
  ScheduledFuture<?> timeoutTask = executor.schedule(
      () -> {
        synchronized (this) {
          future.setException(new PrestoException(
              GENERIC_INSUFFICIENT_RESOURCES,
              format("Insufficient active worker nodes. Waited %s for at least %s workers, but only %s workers are active", executionMaxWait, executionMinCount, currentCount)));
        }
      },
      executionMaxWait.toMillis(),
      MILLISECONDS);
  // remove future if finished (e.g., canceled, timed out)
  future.addListener(() -> {
    timeoutTask.cancel(true);
    removeFuture(future);
  }, executor);
  return future;
}

代码示例来源:origin: jamesdbloom/mockserver

public void submit(HttpForwardActionResult future, Runnable command, boolean synchronous) {
  if (future != null) {
    if (synchronous) {
      try {
        future.getHttpResponse().get(ConfigurationProperties.maxSocketTimeout(), MILLISECONDS);
      } catch (TimeoutException e) {
        future.getHttpResponse().setException(new SocketCommunicationException("Response was not received after " + ConfigurationProperties.maxSocketTimeout() + " milliseconds, to make the proxy wait longer please use \"mockserver.maxSocketTimeout\" system property or ConfigurationProperties.maxSocketTimeout(long milliseconds)", e.getCause()));
      } catch (InterruptedException | ExecutionException ex) {
        future.getHttpResponse().setException(ex);
      }
      command.run();
    } else {
      future.getHttpResponse().addListener(command, getScheduler());
    }
  }
}

代码示例来源:origin: google/guava

ListenableFuture<List<String>> compound = successfulAsList(future1, future2);
future1.addListener(
  new Runnable() {
   @Override

代码示例来源:origin: com.yahoo.vespa/jdisc_core

@Override
public void addListener(Runnable listener, Executor executor) {
  future.addListener(listener, executor);
}

代码示例来源:origin: prestosql/presto

public ListenableFuture<T> createNewListener()
{
  SettableFuture<T> listener = SettableFuture.create();
  synchronized (listeners) {
    listeners.add(listener);
  }
  // remove the listener when the future completes
  listener.addListener(
      () -> {
        synchronized (listeners) {
          listeners.remove(listener);
        }
      },
      directExecutor());
  return listener;
}

代码示例来源:origin: io.prestosql/presto-main

public ListenableFuture<T> createNewListener()
{
  SettableFuture<T> listener = SettableFuture.create();
  synchronized (listeners) {
    listeners.add(listener);
  }
  // remove the listener when the future completes
  listener.addListener(
      () -> {
        synchronized (listeners) {
          listeners.remove(listener);
        }
      },
      directExecutor());
  return listener;
}

代码示例来源:origin: lukas-krecan/future-converter

@Override
public void addListener(Runnable listener, Executor executor) {
  getWrappedFuture().addListener(listener, executor);
}

代码示例来源:origin: net.javacrumbs.future-converter/future-converter-guava-common

@Override
public void addListener(Runnable listener, Executor executor) {
  getWrappedFuture().addListener(listener, executor);
}

代码示例来源:origin: net.javacrumbs.future-converter/future-converter-apifuture-common

@Override
public void addListener(Runnable listener, Executor executor) {
  getWrappedFuture().addListener(listener, executor);
}

代码示例来源:origin: lukas-krecan/future-converter

@Override
public void addListener(Runnable listener, Executor executor) {
  getWrappedFuture().addListener(listener, executor);
}

代码示例来源:origin: io.prestosql/presto-main

public Partition(
    int consumersCount,
    int partitionNumber,
    IntFunction<ListenableFuture<T>> loader,
    ListenableFuture<?> previousReleased,
    IntConsumer disposer)
{
  this.partitionNumber = partitionNumber;
  this.requested = SettableFuture.create();
  this.loaded = Futures.transformAsync(
      allAsList(requested, previousReleased),
      ignored -> loader.apply(partitionNumber),
      directExecutor());
  this.released = SettableFuture.create();
  released.addListener(() -> disposer.accept(partitionNumber), directExecutor());
  this.pendingReleases = consumersCount;
}

代码示例来源:origin: com.yahoo.vespa/filedistribution

ListenableFuture<Optional<File>> addDownloadListener(FileReference fileReference, Runnable runnable) {
  synchronized (downloads) {
    FileReferenceDownload download = downloads.get(fileReference);
    if (download != null) {
      download.future().addListener(runnable, downloadExecutor);
      return download.future();
    }
  }
  return null;
}

代码示例来源:origin: prestosql/presto

public Partition(
    int consumersCount,
    int partitionNumber,
    IntFunction<ListenableFuture<T>> loader,
    ListenableFuture<?> previousReleased,
    IntConsumer disposer)
{
  this.partitionNumber = partitionNumber;
  this.requested = SettableFuture.create();
  this.loaded = Futures.transformAsync(
      allAsList(requested, previousReleased),
      ignored -> loader.apply(partitionNumber),
      directExecutor());
  this.released = SettableFuture.create();
  released.addListener(() -> disposer.accept(partitionNumber), directExecutor());
  this.pendingReleases = consumersCount;
}

代码示例来源:origin: rancher/cattle

@Override
public ListenableFuture<?> subscribe(final String eventName, final EventListener listener) {
  final SettableFuture<?> future = SettableFuture.create();
  boolean doSubscribe = register(eventName, listener);
  if (doSubscribe) {
    doSubscribe(eventName, future);
  } else {
    future.set(null);
  }
  future.addListener(new Runnable() {
    @Override
    public void run() {
      try {
        future.get();
      } catch (Exception e) {
        unsubscribe(eventName, listener);
        disconnect();
      }
    }
  }, executorService);
  return future;
}

代码示例来源:origin: airlift/airlift

@Benchmark
public void benchmark()
    throws Exception
{
  Semaphore semaphore = new Semaphore(futureCount);
  ArrayList<SettableFuture<?>> futures = new ArrayList<>();
  for (int i = 0; i < futureCount; i++) {
    SettableFuture<?> future = SettableFuture.create();
    future.addListener(() -> semaphore.release(1), directExecutor());
    futures.add(future);
  }
  ListenableFuture<?> anyComplete = whenAnyCompleteCancelOthers(futures);
  futures.get(futureCount / 2).set(null);
  semaphore.acquireUninterruptibly(futureCount);
  anyComplete.get();
}

代码示例来源:origin: io.airlift/concurrent

@Benchmark
public void benchmark()
    throws Exception
{
  Semaphore semaphore = new Semaphore(futureCount);
  ArrayList<SettableFuture<?>> futures = new ArrayList<>();
  for (int i = 0; i < futureCount; i++) {
    SettableFuture<?> future = SettableFuture.create();
    future.addListener(() -> semaphore.release(1), directExecutor());
    futures.add(future);
  }
  ListenableFuture<?> anyComplete = whenAnyCompleteCancelOthers(futures);
  futures.get(futureCount / 2).set(null);
  semaphore.acquireUninterruptibly(futureCount);
  anyComplete.get();
}

代码示例来源:origin: org.mock-server/mockserver-core

public void submit(HttpForwardActionResult future, Runnable command, boolean synchronous) {
  if (future != null) {
    if (synchronous) {
      try {
        future.getHttpResponse().get(ConfigurationProperties.maxSocketTimeout(), MILLISECONDS);
      } catch (TimeoutException e) {
        future.getHttpResponse().setException(new SocketCommunicationException("Response was not received after " + ConfigurationProperties.maxSocketTimeout() + " milliseconds, to make the proxy wait longer please use \"mockserver.maxSocketTimeout\" system property or ConfigurationProperties.maxSocketTimeout(long milliseconds)", e.getCause()));
      } catch (InterruptedException | ExecutionException ex) {
        future.getHttpResponse().setException(ex);
      }
      command.run();
    } else {
      future.getHttpResponse().addListener(command, getScheduler());
    }
  }
}

代码示例来源:origin: rancher/cattle

protected Future<?> schedulePing(final EventListener listener, final MessageWriter writer, final AtomicBoolean disconnect) {
  final SettableFuture<?> future = SettableFuture.create();
  retryTimeout.submit(new Retry(API_MAX_PINGS.get(), API_SUB_PING_INVERVAL.get(), future, new Runnable() {
    @Override
    public void run() {
      if (disconnect.get()) {
        unsubscribe(disconnect, writer, listener);
        future.setException(new CancelRetryException());
        throw new CancelRetryException();
      }
      listener.onEvent(new Ping());
    }
  }));
  future.addListener(new Runnable() {
    @Override
    public void run() {
      try {
        future.get();
      } catch (InterruptedException e) {
        unsubscribe(disconnect, writer, listener);
      } catch (ExecutionException e) {
        unsubscribe(disconnect, writer, listener);
      }
    }
  }, executorService);
  return future;
}

相关文章