@yudesong
2018-02-12T03:13:51.000000Z
字数 1768
阅读 810
xUtils
接下来我们看看task模块下有哪些类。

public enum Priority {UI_TOP,UI_NORMAL,UI_LOW,DEFAULT,BG_TOP,BG_NORMAL,BG_LOW;}
public interface TaskHandler {boolean supportPause();boolean supportResume();boolean supportCancel();void pause();void resume();void cancel();boolean isPaused();boolean isCancelled();}
public class PriorityObject<E> {public final Priority priority;public final E obj;public PriorityObject(Priority priority, E obj) {this.priority = priority == null ? Priority.DEFAULT : priority;this.obj = obj;}}
public class PriorityRunnable extends PriorityObject<Runnable> implements Runnable {public PriorityRunnable(Priority priority, Runnable obj) {super(priority, obj);}@Overridepublic void run() {this.obj.run();}}

public class PriorityExecutor implements Executor {private static final ThreadFactory sThreadFactory = new ThreadFactory() {private final AtomicInteger mCount = new AtomicInteger(1);@Overridepublic 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 boolean isBusy() {return mThreadPoolExecutor.getActiveCount() >= mThreadPoolExecutor.getCorePoolSize();}}
PriorityAsyncTask 可以类比AsyncTask源码分析,其实就是加上了Priority属性,线程池换了PriorityExecutor,再次就不多说了。
PriorityObjectBlockingQueue,在xUtils3 里面将其修改为PriorityBlockingQueue。【死磕Java并发】-----J.U.C之阻塞队列:PriorityBlockingQueue,以及JUC源码分析-集合篇(七):PriorityBlockingQueue
