Executor
- Executor
- ExecutorService
- Executors
- Runable
- Callable
- Futute
- execute
- submit
在学习Executor之前,需要首先了解以上8个单词各自的含义。
Executor(执行器)
并发编程的思想核心就是将一系列小任务(Runable)分发给不同的线程,每一个线程去执行各自的任务。而Executor主要用来管理这些线程,实现将执行单元和管理单元分离。Executor框架实现的就是线程池的功能。
Executor 接口提供了execute()
ExecutorService
void shutdown();
List<Runnable> shutdownNow();
boolean isShutdown();
boolean isTerminated();
<T> Future<T> submit(Callable<T> task);
<T> Future<T> submit(Runnable task, T result);
Future<?> submit(Runnable task);
<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks,long timeout, TimeUnit unit)throws InterruptedException;
<T> T invokeAny(Collection<? extends Callable<T>> tasks)throws InterruptedException, ExecutionException;
<T> T invokeAny(Collection<? extends Callable<T>> tasks,long timeout, TimeUnit unit)throws InterruptedException,ExecutionException, TimeoutException;
其中ExecutorService 继承自Executor,实现了功能的扩展,重点是提供了submit功能。
Executors
Executors 是一个工具类,主要用来帮助创建各种线程池。
public static ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor(nThreads, nThreads,0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
}
ThreadPoolExecutor
通过Executors工具类来创建ThreadPoolExecutor的不同线程池FixedThreadPool、SingleThreadExecutor、CachedThreadPool,
例如
public class ThreadPoolTest {
public static void main(String[] args) {
ExecutorService es = Executors.newCachedThreadPool();
es.submit(new Runnable() {
@Override
public void run() {
}
});
}
}