|NO.Z.00109|——————————|BigDataEnd|——|Java&多线程.V21|——|Java.v21|线程池|概念使用|
一、线程池的概念和使用
### --- 线程池的由来
——> 在服务器编程模型的原理,每一个客户端连接用一个单独的线程为之服务,
——> 当与客户端的会话结束时,线程也就结束了,即每来一个客户端连接,
——> 服务器端就要创建一个新线程。
——> 如果访问服务器的客户端很多,那么服务器要不断地创建和销毁线程,
——> 这将严重影响服务器的性能。
### --- 概念和原理
——> 线程池的概念:首先创建一些线程,它们的集合称为线程池,
——> 当服务器接受到一个客户请求后,就从线程池中取出一个空闲的线程为之服务,
——> 服务完后不关闭该线程,而是将该线程还回到线程池中。
——> 在线程池的编程模式下,任务是提交给整个线程池,而不是直接交给某个线程,
——> 线程池在拿到任务后,它就在内部找有无空闲的线程,再把任务交给内部某个空闲的线程,
——> 任务是提交给整个线程池,一个线程同时只能执行一个任务,但可以同时向一个线程池提交多个任务。
### --- 相关类和方法
——> 从Java5开始提供了线程池的相关类和接口:
——> java.util.concurrent.Executors类和java.util.concurrent.ExecutorService接口。
二、其中Executors是个工具类和线程池的工厂类,可以创建并返回不同类型的线程池,常用方法如下:
方法声明 | 功能介绍 |
static ExecutorService newCachedThreadPool() | 创建一个可根据需要创建新线程的线程池 |
static ExecutorServicenewFixedThreadPool(intnThreads) | 创建一个可重用固定线程数的线程池 |
static ExecutorServicenewSingleThreadExecutor() | 创建一个只有一个线程的线程池 |
三、其中ExecutorService接口是真正的线程池接口,主要实现类是ThreadPoolExecutor,常用方法如下:
方法声明 | 功能介绍 |
void execute(Runnable command) | 执行任务和命令,通常用于执行Runnable |
Future submit(Callable task) | 执行任务和命令,通常用于执行Callable |
void shutdown() | 启动有序关闭 |
四、编程代码
package com.yanqi.task18;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolTest {
public static void main(String[] args) {
// 1.创建一个线程池
ExecutorService executorService = Executors.newFixedThreadPool(10);
// 2.向线程池中布置任务
executorService.submit(new ThreadCallableTest());
// 3.关闭线程池
executorService.shutdown();
}
}
五、编译打印
D:\JAVA\jdk-11.0.2\bin\java.exe "-javaagent:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=52811:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath E:\NO.Z.10000——javaproject\NO.H.00001.javase\javase\out\production\javase com.yanqi.task18.ThreadPoolTest
计算的累加和是:50005000
Process finished with exit code 0
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」