为何要使用线程池?

为了减小建立和销毁线程的次数,让每一个线程能够屡次使用,可根据系统状况调整执行的线程数量,防止消耗过多内存,因此咱们可使用线程池.java

java中线程池的顶级接口是Executor(e可rai kei ter),ExecutorService是Executor的子类,也是真正的线程池接口,它提供了提交任务关闭线程池等方法。调用submit方法提交任务还能够返回一个Future(fei 曲儿)对象,利用该对象能够了解任务执行状况,得到任务的执行结果取消任务缓存

因为线程池的配置比较复杂,JavaSE中定义了Executors类就是用来方便建立各类经常使用线程池的工具类。经过调用该工具类中的方法咱们能够建立单线程池(newSingleThreadExecutor),固定数量的线程池(newFixedThreadPool),可缓存线程池(newCachedThreadPool),大小无限制的线程池(newScheduledThreadPool),比较经常使用的是固定数量的线程池和可缓存的线程池,固定数量的线程池是每提交一个任务就是一个线程,直到达到线程池的最大数量,而后后面进入等待队列直到前面的任务完成才继续执行.可缓存线程池是当线程池大小超过了处理任务所需的线程,那么就会回收部分空闲(通常是60秒无执行)的线程,当有任务来时,又智能的添加新线程来执行.工具

 

Executors类中还定义了几个线程池重要的参数,好比说int corePoolSize核心池的大小,也就是线程池中会维持不被释放的线程数量.int maximumPoolSize线程池的最大线程数,表明这线程池汇总能建立多少线程。corePoolSize :核心线程数,若是运行的线程数少corePoolSize,当有新的任务过来时会建立新的线程来执行这个任务,即便线程池中有其余的空闲的线程。maximumPoolSize:线程池中容许的最大线程数.线程

相关文章
相关标签/搜索