ExecutorService 的理解与使用

来源:互联网 发布:见过好听的名字 知乎 编辑:程序博客网 时间:2024/05/22 12:13

ExecutorService其中一个线程池的接口,因为安卓系统对内存的要求特别高,所以当我要异步调用一些耗时线程成就可能会开好几条,这样很容易造成OOM。所以我每个APP在创建之前就会在BaseActivity加入自定义类的对象AsyncTaskExecutor 来控制线程的数量。代码如下:

public class AsyncTaskExecutor {private static AsyncTaskExecutor mInstance = null;private static final int maxExecutor = 4;private ExecutorService mExecutor = null;public static AsyncTaskExecutor getinstance() {if (mInstance == null) {mInstance = new AsyncTaskExecutor();}return mInstance;}private AsyncTaskExecutor() {mExecutor = Executors.newFixedThreadPool(maxExecutor);}public void submit(Runnable a) {mExecutor.execute(a);}}
解释:

// newFixedThreadPool内部有个任务队列,假设线程池里有3个线程,提交了5个任务,那么后两个任务就放在任务队列了,即使前3个任务sleep或者堵塞了,也不会执行后两个任务,除非前三个任务有执行完的。


源码解析

public static ExecutorService newFixedThreadPool(int nThreads) {    return new ThreadPoolExecutor(nThreads, nThreads,                                  0L, TimeUnit.MILLISECONDS,                                  new LinkedBlockingQueue<Runnable>());}

这是源码,你看看返回的是个什么。在让你看看他们的关系
public interface ExecutorService extends Executor
public abstract class AbstractExecutorService implements ExecutorService
public class ThreadPoolExecutor extends AbstractExecutorService

如何调用

一般现在基类实例化对象


然后在继承基类里直接调用方法