1. FutureTask的实现
public Future<?> submit(Runnable task) {
if (task == null) throw new NullPointerException();
RunnableFuture<Void> ftask = newTaskFor(task, null);
execute(ftask);
return ftask;
}
首先会创建出对应的FutureTask,然后交给新的线程去运行,线程运行完会把返回值付给FutureTask的outcome属性
2. execute执行的细节见
http://blog.csdn.net/u011385186/article/details/77971831
3. ThreadPoolExecutor 的 ctl 属性
runStateOf(ctl.get()):表示当前ThreadPoolExecutor的运行状态:RUNNING,SHUTDOWN,STOP,TIDYING,TERMINATED
workerCountOf(ctl.get():表示当前运行中的worker个数
4. ThreadPoolExecutor 的 keepAliveTime & allowCoreThreadTimeOut 属性
对于core worker:allowCoreThreadTimeOut=true 并且 worker等待 blockingqueue超过 keepAliveTime 则会退出worker的循环等待(正常情况下core worker应该会无限等待blockingqueue知道有新的FutureTask过来)
对于非core worker: worker等待 blockingqueue超过 keepAliveTime 则会退出worker的循环等待
5. ThreadPoolExecutor 的 corePoolSize & maximumPoolSize & workQueue & workers属性
组成了线程池的主要逻辑
workers: 池子
corePoolSize & maximumPoolSize:条件
workQueue:blockingqueue,解决生产者消费者问题的正统方式