ExecutorService 是 Java 提供的线程池,也就是说,每次我们需要使用线程的时候,可以通过 ExecutorService 获得线程。
例子:
第一步获得线程池:
Java通过Executors提供四种线程池,分别为:
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
如:ExecutorService executor1 = newCachedThreadPool();
第二步:接收线程参数,返回Future对象,同步执行call() 函数体中的方法
submit( ):该方法接收Runnable或Callable对象作为输入参数,返回一个Future对象。submit方法提交的任务中的call()方法如果返回类型是 Integer,那么submit方法就返回Future;如果call方法返回Float,那么submit方法就返回Future;call方法返回的List,那么submit方法就返回Future<List>,以此类推。具体返回的是哪一种,那么就使用对应类型的引用来引用submit方法的返回值
ExecutorService 中 shutdown()、shutdownNow()、awaitTermination() 含义