基于JUC线程池的使用ExecutorService
往往采用多线程目的都是为了提高程序效率,提高系统使用性。但是频繁的创建和销毁线程本身就是一个有损效率的事。所以java的JUC就提供了线程池的使用。
线程池 :提前创建好多个线程放入线程池中,使用时直接获取,使用完成放回线程池。可以避免频繁创建和销毁线程,实现重复利用。
好处:
- 提高了响应效率(减少了创建线程时间)
- 降低资源消耗(重复利用线程池里面线程,不再是创建)
- 便于管理。
corePoolSize : 核心池大小
maximumPoolSize : 最大线程数
keepAliveTime :线程没有任务多久后会停止
JDK5.0起提供了相关线程池API : Executors 和 ExecutorService
ExecutorService真正的线程池接口,继承了Executor
常见的实现类 ThreadPoolExecurtor。
- void executor(Runable runable) 线程池启动线程。(属于Executor类方法)
- void shutdown() 关闭连接池(ExecutorService接口方法)
Executors 工具类、线程池的工厂类,用于创建并返回不同类型的线程池。注意区分Executor
实现步骤
- 创建线程池服务
- 执行线程
实现:
// 线程类
static class ThreadTest implements Runnable{
public void run() {
System.out.println(Thread.currentThread().getName()+":执行了");
}
}
// 执行类
public static void main(String[] args) {
// 创建线程服务,构造线程池为3
ExecutorService executorService = Executors.newFixedThreadPool(3);
// 启动线程
executorService.execute(new ThreadTest());
executorService.execute(new ThreadTest());
executorService.execute(new ThreadTest());
executorService.execute(new ThreadTest());
}
结果:定义了线程池为3,则4个线程使用线程池中的3个线程。