串行执行任务:SerialExecutor

串行

任务依次执行,跟糖葫芦一样。

1. 执行器

串行执行任务:SerialExecutor_第1张图片
go
@TargetApi(11)
    private static class SerialExecutor implements Executor {
        final ArrayDeque mTasks = new ArrayDeque();
        Runnable mActive;

        public synchronized void execute(final Runnable r) {
            mTasks.offer(new Runnable() {
                public void run() {
                    try {
                        r.run();
                    } finally {
                        scheduleNext();
                    }
                }
            });
            if (mActive == null) {
                scheduleNext();
            }
        }

        protected synchronized void scheduleNext() {
            if ((mActive = mTasks.poll()) != null) {
                THREAD_POOL_EXECUTOR.execute(mActive);
            }
        }
    }

2.线程执行器

public static final Executor THREAD_POOL_EXECUTOR
            = new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE,
            TimeUnit.SECONDS, sPoolWorkQueue, sThreadFactory,
            new ThreadPoolExecutor.DiscardOldestPolicy());
  1. CORE_POOL_SIZE = 5;
  2. MAXIMUM_POOL_SIZE = 128;
  3. KEEP_ALIVE = 1;
  4. sPoolWorkQueue:
private static final BlockingQueue sPoolWorkQueue =        new LinkedBlockingQueue(10);
  1. sThreadFactory
 private static final ThreadFactory  sThreadFactory = new ThreadFactory() {
        private final AtomicInteger mCount = new AtomicInteger(1);

        public Thread newThread(Runnable r) {
            return new Thread(r, "AsyncTask #" + mCount.getAndIncrement());
        }
    };

你可能感兴趣的:(串行执行任务:SerialExecutor)