java线程池

66 阅读1分钟

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,那么这样的开销是不划算的,不使用线程池去避免创建和销毁的开销,将是极大的资源浪费。

易复用和管理:将线程都放在一个池子里,便于统一管理(可以延时执行,可以统一命名线程名称等),同时,也便于任务进行复用。

解耦:将线程的创建和销毁与执行任务完全分离出来,这样方便于我们进行维护,也让我们更专注于业务开发。