关于ExecutorService的介绍可以参考
https://blog.csdn.net/suifeng3051/article/details/49443835
简单来说这个类可以提供线程来做一些工作,可以说是对thread做了封装管理吧。。。用起来还是挺方便的。。。
创建线程池的方法
该类为工厂类,通过调用不同的create函数来创建不同类型的线程池,如下是提供的几种类型的线程池
- newCachedThreadPool 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
- newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
- newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
- newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
启动线程的方法:
调用方法支持如下几种
- execute(Runnable)
- submit(Runnable)
- submit(Callable)
- invokeAny(...)
- invokeAll(...)
submit(Runnable)和execute(Runnable)区别是前者可以返回一个Future对象,通过返回的Future对象,我们可以检查提交的任务是否执行完毕。
结束线程的方法
- ExecutorService.shutdown:等待线程中的任务运行完成时再结束线程
- ExecutorService.shutdownNow:立刻执行所有线程中正在执行的任务