Java内置的线程池
线程池:为了节约系统资源,减少创建线程的开销以及更好的管理线程,Java提供了一套Executor框架,封装了对多线程的控制
Executor本身是一个接口,其代码如下:
public interface Executor {
void execute(Runnable command);
}
ExecutorService接口对该接口进行了扩展,增加很多方法
shutdown()
shutdowmNow()
isShutdown()
isTerminated()
awaitTermination()
submit(Callable)
submit(Runnable,T)
submit(Runnable)
invokeAll()等重载方法
为何要使用线程池?
降低开销:在创建和销毁线程的时候会产生很大的系统开销,频繁创建/销毁意味着CPU资源的频繁切换和占用,线程是属于稀缺资源,不可以频繁的创建。假设创建线程的时长记为t1,线程执行任务的时长记为t2,销毁线程的时长记为t3,如果我们执行任务t2<t1+t3,那么这样的开销是不划算的,不使用线程池去避免创建和销毁的开销,将是极大的资源浪费。
易复用和管理:将线程都放在一个池子里,便于统一管理(可以延时执行,可以统一命名线程名称等),同时,也便于任务进行复用。
解耦:将线程的创建和销毁与执行任务完全分离出来,这样方便于我们进行维护,也让我们更专注于业务开发。