标签:
1.ThreadFactory接口
此接口用来作为一个工厂来生成线程
2.BlockingDeque队列
阻塞队列是一个处理异步问题的队列,满足生产消费的条件特性。LinkedBlockingDeque是一个可以自定义队列大小的阻塞队列数据结构。
3.ThreadPoolExecutor
这个是一个继承自AbstractExecutorService的类,顾名思义,这个是一个ExecutorService的子类对象,可以分配线程执行任务。
这个多参数的构造方法是:
new ThreadPoolExecutor(CORE_POOL_SIZE,MAXIMUM_POOL_SIZE,KEEP_ALIVE, TimeUnit.SECONDS,sPoolWorkQueue,sThreadFactory, new ThreadPoolExecutor.DiscardOldestPolicy());
这些参数的意义是:
CORE_POOL,维持的线程池大小,
MAXINUM_POOL,线程池可以同时包含的最大线程数,
KEEP_ALIVE,当有超过线程池大小的线程时,多余的空闲线程等待任务的时间,超时则被中断
TimeUnit.SECONDS,对于KEEP_ALIVE计数变量的单位,这个是以秒为单位
sPoolWorkQueque。用来保存运行完毕的线程的队列
sThreadFactory,用来创建新线程的工厂
new ThreadPoolExecutor.DiscardOldestPolicy(),针对线程池外被创建的线程的操作,这个表明县城会在一段时间之后不再等待任务而被销毁u。
4.实现Executor接口
如果实现接口的过程中只实现他的execute方法,那么一旦使用execute方法则只执行他的实现中的方法,
譬如:
private static final Executor EXECUTOR = new Executor() { @Override public void execute(Runnable command) { command.run(); } };
问题来了,如果不是在内部制定command的run的话,那么Runnable command将不会被执行。
5.构造方法建立的对象
mWorker是一个Callable实现下的对象,call返回的是一个后台处理doInBackground根据参数处理任务之后的返回的结果
mFuture是一个FutureTask的对象,可以返回执行之后的结果
使用的postResult来post任务,使用内联的Handler来接受消息,根据消息不同选择处理方式。
这里的消息指的是一个是请求结果,另一个是请求更新进度。
6.execute(Params。。。)
这个方法默认执行的是executeOnExecutor方法,executeOnExecutor主要处理了异常问题和参数设置。
为WorkerRunnable设置好参数,然后通过Executor的execute执行mFuture这个任务。
7.finish方法
这个方法是用来撤销此对象,默认实现cancel是空值。
总结起来,这个MyAsyncTask作为基类实现的操作是根据参数处理任务,根据消息处理结果,更新数据,
任务的执行主要通过两个Executor来实现,这两个都是ThreadPoolExcutor的对象,分别维持有一个阻塞的Runnable对象和一个线程工厂,并应用了超限调度。
任务的结果通过Future来获取。
由于在不同线程中都要可能发送消息,所以使用一个内部Handler处理类内部的全局消息。
标签:
原文地址:http://www.cnblogs.com/lhyz/p/4510718.html