有的时候,你可能会产生大量的线程,这些线程的执行可能是有规定的,比如同时只运行最多有3个线程在执行,这种情况就可以使用线程执行器。线程执行器的分为一下几种:
1)固定大小的
ExecutorService executorService = Executors.newFixedThreadPool(3);
这个执行器表示不论多少个线程被装进这个执行器里面,同时在运行的最多只有3个。
2)单线程执行
ExecutorService executorService = Executors.newSingleThreadExecutor();
这个和Executors.newFixedThreadPool(1)是一个道理。
3)缓存式执行器
ExecutorService executorService = Executors.newCachedThreadPool();
你来多少线程我就给你起多少个线程为你服务。
另外,关闭线程池有两种方法,shutdown()表示等所有任务都执行完毕之后再关闭;shutdownNow()表示立即关闭,不论是否当前还有正在运行的任务。
往执行器中提交任务的两种任务:
1:普通提交,不管执行结果:
servie.execute(new Runnable(){
@Override
public void run() {
System.out.println("task running in Executors");
}
});
2:Future&Callable等待执行结果:
Future future = servie.submit(new Callable<String>() {
@Override
public String call() throws Exception {
return "Hello";
}
});
try {
System.out.println(future.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}