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中线程池的主要内容,如果未能解决你的问题,请参考以下文章

Java多线程基础:进程和线程之由来

进程和线程之由来

Java多线程基础:进程和线程之由来

java 第58节 线程同步问题的由来

java 如何获得线程池中正在执行的线程数?

java应用中可以有多少 线程池