JAVA中线程池
Posted 技术很low的瓜贼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA中线程池相关的知识,希望对你有一定的参考价值。
线程池
-
概念:
线程池的概念:首先创建一些线程,它们的集合称为线程池,当服务器接受到一个客户请求后,就从线程池中取出一个空闲的线程为之服务,服务完后不关闭该线程,而是将该线程还回到线程池中 -
原理:
在线程池的编程模式下,任务是提交给整个线程池,而不是直接交给某个线程,线程池在拿到任务后,它就在内部找有无空闲的线程,再把任务交给内部某个空闲的线程,任务是提交给整个线程池,一个线程同时只能执行一个任务,但可以同时向一个线程池提交多个任务 -
由来:
- 在服务器编程模型的原理,每一个客户端连接用一个单独的线程为之服务,当与客户端的会话结束时,线程也就结束了,即每来一个客户端连接,服务器端就要创建一个新线程
- 如果访问服务器的客户端很多,那么服务器要不断地创建和销毁线程,这将严重影响服务器的性能
-
相关类和方法:
-
从Java5开始提供了线程池的相关类和接口:java.util.concurrent.Executors类和java.util.concurrent.ExecutorService接口
-
其中Executors是个工具类和线程池的工厂类,可以创建并返回不同类型的线程池
-
Executors类常用方法:
方法 | 功能 |
---|---|
static ExecutorService newCachedThreadPool() | 创建一个可根据需要创建新线程的线程池 |
static ExecutorService newFixedThreadPool(intnThreads) | 创建一个可重用固定线程数的线程池 |
static ExecutorService newSingleThreadExecutor() | 创建一个只有一个线程的线程池 |
- 其中ExecutorService接口是真正的线程池接口,主要实现类是ThreadPoolExecutor
- 常用方法:
方法 | 功能 |
---|---|
void execute(Runnable command) | 执行任务和命令,通常用于执行Runnable |
Future submit(Callable task) | 执行任务和命令,通常用于执行Callable |
void shutdown() | () 启动有序关闭 |
以上是关于JAVA中线程池的主要内容,如果未能解决你的问题,请参考以下文章