java中任务的抽象不是Thread,而是Executor!
public interface Executor { void execute(Runnable command); }
怎么理解这句话呢,可以认为Thread是任务的执行,而无法代表任务的抽象,一个任务的抽象应该包含任务的执行策略来描述“What, Where, When, How”等问题:
在什么(What)线程中执行任务?
任务按照什么(What)顺序执行?
有多少个(How Many)任务能并发执行
在队列中有多少个(How Many)任务在等待执行
如果系统由于过载而需要拒绝一个任务,那么应该选择哪一个(Which)任务?如何(How)通知应用程序有任务被拒绝?
在执行一个任务之前或之后,应该进行哪些(What)动作?
在Executor中提供个几个线程池的实现,来帮助完成上述设计的执行策略,他们可以通过Executors的静态工厂方法之一来创建,这些方法分别是:newFixedThreadPool, newCachedThreadPool, newSingleThreadExecutor, newScheduledThreadPool.
其中newFixedThreadPool将创建一个固定长度的线程池,创建之后规模不在变化
newCachedThreadPool 线程池规模不受限制
newSingleThreadExecutor 单个线程串行执行任务
newShceduledThreadPool 创建一个固定长度的线程池,而且以延迟或定时的方式来执行任务