标签:分享 factory dfa 队列 技术分享 阻塞队列 函数 线程池 actor
在ThreadPoolExecutor的构造方法中,定义了线程池的核心线程数,最大线程数,过期时间,时间单位,阻塞队列,创建线程的工厂,拒绝策略。下面来看看默认的线程工厂,它到底是如何创建新的线程的。
DefaultThreadFactory实现了ThreadFactory接口,
在DefaultThreadFactory构造方法中确定线程的命名前缀,之后每创建一个线程,poolNumber不变,threadNumber++,并设置线程是否是Deamon线程、线程的优先级等。
何时调用newThread()方法呢?Worker是对提交任务的封装,如果调用Worker的构造方法,就会创建一个新的线程中去执行任务。
现在我们来看看线程池的运行原理:当提交任务到线程池中,会调用execute方法
如果当前线程数比核心线程数小,那么就添加一个Worker(也就是创建一个新的线程,去处理这个任务),并直接return。如果已经达到核心线程数,那么新来的任务会插入到阻塞队列中,也就是workQueue.offer(command).如果队列也满了,还有任务到来的话,那么就继续创建新的线程。如果创建新的线程时池子已经达到最大线程数,就采取拒绝策略。
添加Worker的方法:
在该方法中会调用new Worker(firstTask)构造函数,创建线程并运行此任务。
标签:分享 factory dfa 队列 技术分享 阻塞队列 函数 线程池 actor
原文地址:http://www.cnblogs.com/james111/p/7382619.html