频繁的创建销毁线程需要时间,所以需要有一种线程复用的方法提高效率,那就是线程池
concurrent
java.util.concurrent包专门处理并发,相关类和接口可以在线程并发的时候使用。
接口Executor是函数式接口,抽象方法为void execute(Runnable command);
这是一个顶层接口,该方法就是用来执行传进去的任务的
java.util.concurrent.ExecutorService
ExecutorService接口继承了Executor接口,并声明了一些方法:submit、invokeAll、invokeAny以及
shutDown等
java.util.concurrent.AbstractExecutorService
抽象类AbstractExecutorService实现了ExecutorService接口
java.util.concurrent.ThreadPoolExecutor
ThreadPoolExecutor继承了类AbstractExecutorService,并进行了扩展
ThreadExecutorService
ThreadPoolExecutor 类中有一个五参构造器
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) {...}
参数的含义:
corePoolSize ,线程池维护线程的最少数量(核心线程数) maximumPoolSize ,线程池维护线程的最大数量
keepAliveTime ,线程池维护线程所允许的空闲时间
unit ,线程池维护线程所允许的空闲时间的单位(毫秒,秒,…)
workQueue ,线程池所使用的缓冲队列
Executors
java.util.concurrent.Executors ,这个是一个工厂类,可以便捷的帮我们生产出线程池对象,同时该类中也提供了一些实用的工厂方法(静态的)
用完后必须手动关闭线程池
工厂方法1,创建一个定长的线程池,可控制线程最大并发数,超出的线程会在队列中等待,newFixedThreadPool()
工厂方法2,创建一个可缓存的线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,否则新建线程,newCachedThreadPool()
工厂方法3,创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序执行,newSingleThreadExecutor()
工厂方法4,创建一个定长线程池,支持定时及周期性任务执行,newScheduledThreadPool()