欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Java SimpleTimeLimiter 类用法示例

最编程 2024-04-30 19:27:52
...

实例1: waitUntilAvailable

import com.google.common.util.concurrent.SimpleTimeLimiter; //导入依赖的package包/类
/** Probes {@code url} until it becomes available. */
static void waitUntilAvailable(final URL url, int timeoutMs) {
  try {
    Void unusedReturnValue = SimpleTimeLimiter.create(newCachedThreadPool())
        .callWithTimeout(
            () -> {
              int exponentialBackoffMs = 1;
              while (true) {
                if (isAvailable(url)) {
                  return null;
                }
                Thread.sleep(exponentialBackoffMs *= 2);
              }
            },
            timeoutMs,
            TimeUnit.MILLISECONDS);
  } catch (Exception e) {
    throwIfUnchecked(e);
    throw new RuntimeException(e);
  }
}
 

实例2: stop

import com.google.common.util.concurrent.SimpleTimeLimiter; //导入依赖的package包/类
/** Stops the HTTP server. */
public void stop() {
  try {
    Void unusedReturnValue = SimpleTimeLimiter.create(newCachedThreadPool())
        .callWithTimeout(
            () -> {
              server.stop();
              return null;
            },
            SHUTDOWN_TIMEOUT_MS,
            TimeUnit.MILLISECONDS);
  } catch (Exception e) {
    throwIfUnchecked(e);
    throw new RuntimeException(e);
  }
}
 

实例3: DnsResolverFilter

import com.google.common.util.concurrent.SimpleTimeLimiter; //导入依赖的package包/类
@Inject
public DnsResolverFilter(@Named("dns_resolver_timeout") Period resolverTimeout,
                         @Named("dns_resolver_run_before_extractors") boolean shouldRunBeforeExtractors,
                         @Named("dns_resolver_enabled") boolean enabled,
                         MetricRegistry metricRegistry) {
    this.shouldRunBeforeExtractors = shouldRunBeforeExtractors;
    this.enabled = enabled;
    timeout = resolverTimeout.toStandardDuration().getMillis();
    timeLimiter = SimpleTimeLimiter.create(
            Executors.newSingleThreadExecutor(
                    new ThreadFactoryBuilder()
                            .setDaemon(true)
                            .setNameFormat("dns-resolver-thread-%d")
                            .build()
            )
    );
    this.resolveTime = metricRegistry.timer(name(DnsResolverFilter.class, "resolveTime"));
    this.resolveTimeouts = metricRegistry.meter(name(DnsResolverFilter.class, "resolveTimeouts"));
}
 

推荐阅读