/** * Summary: 利用线程池重复利用资源,异步执行任务Runnable,减小创建线程开销 * Version 1.0 * Date: 13-11-5 * Time: 上午10:31 * Copyright: Copyright (c) 2013 */ package com.candc.service; import android.os.Handler; import android.os.Looper; import java.util.concurrent.*; public class TaskExecutor { private static ScheduledThreadPoolExecutor gScheduledThreadPoolExecutor = null; private static Handler gMainHandler = null; //不包含网络传输处理过程的线程池执行对象 private static ExecutorService gThreadPoolExecutor = null; //包含网络传输处理过程的线程池执行对象 private static ExecutorService gNetProcessThreadPoolExecutor = null; //执行不包含网络传输处理过程的线程 public static void executeTask(Runnable task) { ensureThreadPoolExecutor(); gThreadPoolExecutor.execute(task); } //执行包含网络传输处理过程的线程,可能存在等待阻塞的状况 public static void executeNetTask(Runnable task) { ensureNetProcessThreadPoolExecutor(); gNetProcessThreadPoolExecutor.execute(task); } public static <T> Future<T> submitTask(Callable <T> task) { ensureThreadPoolExecutor(); return gThreadPoolExecutor.submit(task); } public static void scheduleTask(long delay, Runnable task) { ensureScheduledThreadPoolExecutor(); gScheduledThreadPoolExecutor.schedule(task, delay, TimeUnit.MILLISECONDS); } public static void scheduleTaskAtFixedRateIgnoringTaskRunningTime(long initialDelay, long period, Runnable task) { ensureScheduledThreadPoolExecutor(); gScheduledThreadPoolExecutor.scheduleAtFixedRate(task, initialDelay, period, TimeUnit.MILLISECONDS); } public static void scheduleTaskAtFixedRateIncludingTaskRunningTime(long initialDelay, long period, Runnable task) { ensureScheduledThreadPoolExecutor(); gScheduledThreadPoolExecutor.scheduleWithFixedDelay(task, initialDelay, period, TimeUnit.MILLISECONDS); } public static void scheduleTaskOnUiThread(long delay, Runnable task) { ensureMainHandler(); gMainHandler.postDelayed(task, delay); } public static void runTaskOnUiThread(Runnable task) { ensureMainHandler(); gMainHandler.post(task); } private static void ensureMainHandler() { if (gMainHandler == null) { gMainHandler = new Handler(Looper.getMainLooper()); } } private static void ensureThreadPoolExecutor() { if (gThreadPoolExecutor == null) { gThreadPoolExecutor = new ThreadPoolExecutor(5, 10, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(), Executors.defaultThreadFactory()); } } private static void ensureNetProcessThreadPoolExecutor() { if (gNetProcessThreadPoolExecutor == null) { gNetProcessThreadPoolExecutor = new ThreadPoolExecutor(10, 15, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(), Executors.defaultThreadFactory()); } } private static void ensureScheduledThreadPoolExecutor() { if (gScheduledThreadPoolExecutor == null) { gScheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(2); } } public static void shutdown() { if (gThreadPoolExecutor != null) { gThreadPoolExecutor.shutdown(); gThreadPoolExecutor = null; } if (gScheduledThreadPoolExecutor != null) { gScheduledThreadPoolExecutor.shutdown(); gScheduledThreadPoolExecutor = null; } } }