All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hubspot.blazar.util.ManagedScheduledExecutorServiceProvider Maven / Gradle / Ivy

The newest version!
package com.hubspot.blazar.util;

import com.google.common.base.Preconditions;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import io.dropwizard.lifecycle.Managed;

import javax.inject.Provider;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;

public class ManagedScheduledExecutorServiceProvider implements Provider, Managed {
  private final ScheduledExecutorService service;
  private final AtomicBoolean stopped;

  public ManagedScheduledExecutorServiceProvider(int threads, String name) {
    ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat(name + "-pool-%d").setDaemon(true).build();
    this.service = Executors.newScheduledThreadPool(threads, threadFactory);
    this.stopped = new AtomicBoolean();
  }

  @Override
  public void start() {}

  @Override
  public ScheduledExecutorService get() {
    Preconditions.checkState(!stopped.get(), "Already stopped");
    return service;
  }

  @Override
  public void stop() throws InterruptedException {
    if (stopped.compareAndSet(false, true)) {
      service.shutdown();
      service.awaitTermination(5, TimeUnit.SECONDS);
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy