content: package com.lidroid.xutils.task;
  
  import java.util.concurrent.*;
  import java.util.concurrent.atomic.AtomicInteger;
  
  /**
   * Author: wyouflf
   * Date: 14-5-16
   * Time: 上午11:25
   */
  public class PriorityExecutor implements Executor {
  
      private static final int CORE_POOL_SIZE = 5;
      private static final int MAXIMUM_POOL_SIZE = 256;
      private static final int KEEP_ALIVE = 1;
  
      private static final ThreadFactory sThreadFactory = new ThreadFactory() {
          private final AtomicInteger mCount = new AtomicInteger(1);
  
          @Override
          public Thread newThread(Runnable r) {
              return new Thread(r, "PriorityExecutor #" + mCount.getAndIncrement());
          }
      };
  
      private final BlockingQueue<Runnable> mPoolWorkQueue = new PriorityObjectBlockingQueue<Runnable>();
      private final ThreadPoolExecutor mThreadPoolExecutor;
  
      public PriorityExecutor() {
          this(CORE_POOL_SIZE);
      }
  
      public PriorityExecutor(int poolSize) {
          mThreadPoolExecutor = new ThreadPoolExecutor(
                  poolSize,
                  MAXIMUM_POOL_SIZE,
                  KEEP_ALIVE,
                  TimeUnit.SECONDS,
                  mPoolWorkQueue,
                  sThreadFactory);
      }
  
      public int getPoolSize() {
          return mThreadPoolExecutor.getCorePoolSize();
      }
  
      public void setPoolSize(int poolSize) {
          if (poolSize > 0) {
              mThreadPoolExecutor.setCorePoolSize(poolSize);
          }
      }
  
      public boolean isBusy() {
          return mThreadPoolExecutor.getActiveCount() >= mThreadPoolExecutor.getCorePoolSize();
      }
  
      @Override
      public void execute(final Runnable r) {
          mThreadPoolExecutor.execute(r);
      }
  }
  