1. Executor 管理线程
Executor 框架提供了各种类型的线程池。主要有以下工厂方法:
ExecutorService d = Executors.newFixedThreadPool(9);
Executors.newSingleThreadExecutor();
Executors.newCachedThreadPool();
Executors.newSingleThreadScheduledExecutor();
Executors.newScheduledThreadPool(5);
newFixedThreadPool
/*
* 该方法返回一个固定数量的线程池,该线程池中的线程数始终不变,当提交一个任务时,线程池中有空闲线程,立即执行,当线程池中没有空闲线程被暂存在一个队列,有空闲线程时继续执行。FixedThreadPool 一次性预先执行代价高昂的线程分配,因此可以限制线程的数量。节约时间。
*/
/*ExecutorService exe2 = Executors.newFixedThreadPool(5);
exe2.execute(new ExtendsThreadBase("A"));
exe2.execute(new ExtendsThreadBase("B"));
exe2.execute(new ExtendsThreadBase("C"));
exe2.execute(new ExtendsThreadBase("D"));
exe2.shutdown();
*/
CachedThreadPool
/*
* 该方法返回一个根据任务实际情况调整线程数量的线程, 当提交一个任务时,线程池中有空闲线程,立即执行,如果没有空闲线程,则重新创建一个线程执行。
/*ExecutorService exe = Executors.newCachedThreadPool();
exe.execute(new ExtendsThreadBase("A"));
exe.execute(new ExtendsThreadBase("B"));*/
/*
* 对exe.shutdown() 的调用可以防止新任务被提交到这个executor,
* 当前线程将继续运行在exe.shutdown()被调用之前提交的所有任务。
* 这个程序将在Executor中所有任务完成之后尽快退出。
*/
/* exe.shutdown();
System.out.println("main thread is over");*/
SingleThreadExecutor
/*该方法返回只有一个线程的线程池
* SingleThreadExecutor就像线程数量为一的FixedThreadPool。
* 如果向SingleThreadExecutor提交了多个任务,那么这些任务将排队。
* 每个任务都会在下一个任务开始之前结束。
* 如下面。A执行完之后再执行B,依次排队执行
*/
ExecutorService exe3 = Executors.newSingleThreadExecutor();
exe3.execute(new ExtendsThreadBase("A"));
exe3.execute(new ExtendsThreadBase("B"));
exe3.execute(new ExtendsThreadBase("C"));
exe3.execute(new ExtendsThreadBase("D"));
exe3.shutdown();
newSingleThreadScheduledExecutor
/*
*返回scheduleExecutorServices对象,线程池大小为1,scheduleExecutorServices接口在ExecutorServices接口上扩展了在给定时间执行某个任务的功能,如在某个固定的延时之后执行,或者周期性执行某个任务。
*/
newScheduledThreadPool
/*
*改方法返回scheduleExecutorServices对象,但是可以指定线程池数量。
*/
*/