单例模式+策略模式-java线程池

public abstract class ThreadPoolInitPolicy {

  protected static volatile ThreadPoolExecutor executor;

  protected static final int DEFAULT_QUEUE_CAPACITY = 10000;
  protected static final long DEFAULT_KEEP_ALIVE_TIME = 1L;

  protected static final String DEFAULT_THREAD_NAME_PREFIX = "yourappname-thread";

  /**
   * initial executor policy
   *
   * @return ThreadPoolExecutor
   */
  public abstract ThreadPoolExecutor initExecutor();
}
public class SingleThreadPolicy extends ThreadPoolInitPolicy {

  @Override
  public ThreadPoolExecutor initExecutor() {
    int corePoolSize = 1;
    int maxPoolSize = 1;
    ThreadPoolExecutor.CallerRunsPolicy policy = new ThreadPoolExecutor.CallerRunsPolicy();
    BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(DEFAULT_QUEUE_CAPACITY);
    ThreadFactory threadFactory =
        new ThreadFactoryBuilder()
            .setNameFormat(DEFAULT_THREAD_NAME_PREFIX + "-%d")
            .setDaemon(true)
            .build();
    return new ThreadPoolExecutor(
        corePoolSize,
        maxPoolSize,
        DEFAULT_KEEP_ALIVE_TIME,
        TimeUnit.HOURS,
        workQueue,
        threadFactory,
        policy);
  }
}
public class MaxThreadPoolPolicy extends ThreadPoolInitPolicy {
  @Override
  public ThreadPoolExecutor initExecutor() {
    int coreCount = Runtime.getRuntime().availableProcessors();
    int corePoolSize = coreCount + 1;
    int maxPoolSize = coreCount + 1;
    ThreadPoolExecutor.CallerRunsPolicy policy = new ThreadPoolExecutor.CallerRunsPolicy();
    BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(DEFAULT_QUEUE_CAPACITY);
    ThreadFactory threadFactory =
        new ThreadFactoryBuilder()
            .setNameFormat(DEFAULT_THREAD_NAME_PREFIX + "-%d")
            .setDaemon(true)
            .build();
    return new ThreadPoolExecutor(
        corePoolSize,
        maxPoolSize,
        DEFAULT_KEEP_ALIVE_TIME,
        TimeUnit.HOURS,
        workQueue,
        threadFactory,
        policy);
  }
}
public final class AppThreadPoolExecutor {

  private static volatile ThreadPoolExecutor executor;

  private AppThreadPoolExecutor () {}

  public static ThreadPoolExecutor getExecutor() {
    if (executor != null) {
      return executor;
    }
    synchronized (AppThreadPoolExecutor.class) {
      if (executor == null) {
        executor = initExecutor();
      }
    }
    return executor;
  }

  private static ThreadPoolExecutor initExecutor() {
    ThreadPoolInitPolicy policy = new SingleThreadPolicy();
    return policy.initExecutor();
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值