JUC 一 线程池
欢迎光临我的博客[http://poetize.cn],前端使用Vue2,聊天室使用Vue3,后台使用Spring Boot
线程
线程,是程序执行的最小单元。线程是进程中的其中一个实体,是被系统独立调度和分派的基本单位
- 它可与同属一个进程的其它线程共享进程所拥有的全部资源。
- 一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。
- 多线程:一个应用程序有一个以上的线程。
并发与并行
并发:
一个应用程序的多个线程可以是并发的。
并发的实质是一个物理CPU(也可以多个物理CPU) 在若干道程序(或线程)之间多路复用,
并发性是对有限物理资源强制行使多用户共享以提高效率。
所有的并发处理都有排队等候,唤醒,执行等这样的步骤
并行:
并行是多个应用程序在同一时间运行,例如在多核处理器上。并不存在像并发那样竞争,等待的概念。
线程池
线程池是指在初始化一个多线程应用程序过程中创建一个线程集合:
在需要执行新的任务时重用这些线程而不是新建一个线程(提高线程复用,减少性能开销)
线程使用完回到池子中,然后等待下一次分配任务。
线程池作用:限制系统中执行线程的数量
根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果;少了浪费了系统资源,多了造成系统拥挤效率不高。
用线程池控制线程数量,其他线程排队等候。
Java线程池框架
线程池分为三种:
- 基础线程池ThreadPoolExecutor
- 延时任务线程池 ScheduledThreadPoolExecutor
- 分治线程池ForkJoinPool。
Executor:
线程池的最上层接口,提供了任务提交的基础方法。
ExecutorService:
提供了线程池管理的上层接口,如池销毁、任务提交、异步任务提交。
ScheduledExecutorService:
提供任务定时或周期执行方法的 ExecutorService。
AbstractExecutorService:
为 ExecutorService 的任务提交方法提供了默认实现。
ThreadPoolExecutor:
线程池类,提供线程和任务的调度策略。
ScheduledThreadPoolExecutor:
属于线程池的一种,它可以允许任务延迟或周期执行,类似java的Timer。
ForkJoinPool:
JDK1.7加入的成员,也是线程池的一种。
只允许执行 ForkJoinTask 任务,它是为那些能够被递归地拆解成子任务的工作类型量身设计的。
其目的在于能够使用所有可用的运算资源来提升应用性能。
Executors:
创建各种线程池的工具类。