1、Executor 框架:
异步任务执行框架。提供了对生命周期的支持,以及统计信息收集,应用程序管理和性能监视等机制。
·基于生产者-
消费者模式。
·将任务提交过程与任务执行过程解耦,并且用
Runnable来表示任务
2、
线程池
·newFixedThreadPool:创建一个固定长度的线程池。
·newCachedThreadPool:创建一个可
缓存的线程池。
·newSingleThreadPool:是一个单线程的线程池,按照任务在
队列中的顺序来串行执行[FIFO,LIFO,优先级]等。
·newScheduledThreadPool:创建一个固定长度的线程池,并且以定时或者延时的方式执行任务。
3、Executor生命周期
·Executor
Service的生命周期有3种状态:运行,关闭,已终止。
·ExecutorService创建时就处于运行状态。
·shutdown方法将执行平缓的关闭过程:不接受新的任务,同时等待已提交的任务执行完成,保护还未开始执行的任务
4、Executor类只提供线程池的功能,并不提供生命周期监控的功能。
ExecutorService类不仅提供了线程池,而且具有生命周期监控等功能。
5、Executor.execute(Runnable
command)
Future<T> future = ExecutorService.submit(Callable<T> task)
List<Future<T>> list = ExecutorService.invokeAll(Collection<Callable<T>> tasks, timeout, unit)
6、应用:
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
public class TaskExecution {
private static final ExecutorService exec = Executors.newFixedThreadPool(4);
public static void main(String[] args) {
Callable<String> task = new Callable<String>() {
@Override
public String call() throws Exception {
Thread.sleep(1000);
return "success";
}
};
Future<String> future= exec.submit(task);
// try {
// Thread.sleep(1000);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
System.out.println("isTerminate = "+exec.isTerminated());
try {
System.out.println("future.get = "+future.get(800,TimeUnit.NANOSECONDS));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
exec.shutdown();
} catch (ExecutionException e) {
e.printStackTrace();
exec.shutdown();
} catch (TimeoutException e) {
e.printStackTrace();
future.cancel(true);
exec.shutdown();
}
System.out.println("------------");
}
}