ExecutorService扩展了Executor并添加了一些生命周期管理的方法。一个Executor的生命周期有三种状态运行、关闭和终止。
Executor创建时处于运行状态。当调用ExecutorService.shutdown()后,处于关闭状态,isShutdown()方法返回true。这时,不应该再向Executor中添加任务,所有已添加的任务执行完毕后,Executor处于终止状态,isTerminated()返回true。如果Executor处于关闭状态,往Executor提交任务会抛出unchecked exception RejectedExecutionException。
//返回的线程池中有以一个线程
ExecutorService executorService1 = Executors.newSingleThreadExecutor();
//线程池中的线程数量可以自己手动指定
ExecutorService executorService2 = Executors.newFixedThreadPool(10);
//创建一个动态扩展的线程池
ExecutorService executorService3 = Executors.newCachedThreadPool();
//execute(Runable())方法执行线程
ExecutorService executorService = Executors.newFixedThreadPool(4);
List<Runnable> runnableList = new ArrayList<>();
for(int i = 0;i<6;i++){
final int m = i;
runnableList.add(new Runnable() {
@Override
public void run() {
for(int n = 0;n<10;n++){
System.out.println(Thread.currentThread().getName()+" i="+ m +" n="+n);
}
}
});
}
for (Runnable runnable : runnableList) {
executorService.execute(runnable);
}
executorService.shutdown();
// submit(Callable())执行线程
//Future用来接收线程返回的执行结果
ExecutorService executorService = Executors.newFixedThreadPool(4);
int sumAll = 0;
for(int i = 1;i<=6;i++){
Future<Integer> future = executorService.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
int sum = 0;
for(int n = 1;n <=10;n++){
sum +=n;
}
return sum;
}
});
sumAll = sumAll+ future.get();
}
System.out.println(sumAll);
executorService.shutdown();
在使用时,可以创建一个单例模式的工具类来使用。
public class ThreadPoolUtil {
private static final ExecutorService executorService = Executors.newCachedThreadPool();
public static ExecutorService getExecutorService(){
return executorService;
}
}