java多线程入门(五)线程池的使用

简介: java多线程入门(五)线程池的使用

1.为什么用线程池



  • 线程池会维护和创建一些存活的线程,达到开箱即用的效果
  • 对线程的重复利用,减少线程的创建、销毁对系统的开销
  • 有任务执行的时候,可以直接执行,减少系统响应时间
  • 线程池可以有效的管控线程,反例每个请求过来都创建个线程在并发量的大的时候系统可能会挂掉的


2.创建线程池的几种方式



  • //创建一个缓冲池,缓冲池容量大小为Integer.MAX_VALUE,在执行任务为空的时候会释放掉线程的,有新任务的时候需要重新创建线程
  • Executors.newCachedThreadPool();
  • //创建容量为1的缓冲池
  • Executors.newSingleThreadExecutor();
  • //创建固定容量大小的缓冲池 它不会释放工作线程,还会占用一定的系统资源
  • Executors.newFixedThreadPool(int);
  • //创建周期性执行的线程池
  • Executors.newScheduledThreadPool(1);
  • 通过代码可以看到上面的线程创建都是基于ThreadPoolExecutor创建出来的


ThreadPoolExecutor介绍



public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler) 
//调用
executor.execute(Runnable command)
executor.sumbit(Runnable command)
//这里可以有返回值
executor.sumbit(Callable <T> task)
Future<String> future = executor.submit(callable);
System.out.println(future.get())
复制代码


参数介绍


  • corePoolSize 核心线程数定义了最小可以同时运行的线程数量
  • maximumPoolSize 线程池最大线程数,线程池最多可以创建的线程数
  • keepAliveTime 线程没有任务执行时最多保持多久时间会终止
  • unit 时间单位
  • workQueue 一个阻塞队列,用来存储等待执行的任务
  • ArrayBlockingQueue 有界队列
  • LinkedBlockingQueue 无界队列
  • SynchronousQueue 同步队列
  • threadFactory 线程工厂,主要用来创建线程
  • RejectedExecutionHandler 拒绝策略
  • ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。
  • ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。
  • ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)
  • ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务


执行过程


  • 获取系统CPU个数
  • Runtime.getRuntime().availableProcessors()


网络异常,图片无法展示
|

相关文章
|
6月前
|
存储 Oracle Java
java零基础学习者入门课程
本课程为Java零基础入门教程,涵盖环境搭建、变量、运算符、条件循环、数组及面向对象基础,每讲配示例代码与实践建议,助你循序渐进掌握核心知识,轻松迈入Java编程世界。
530 0
|
6月前
|
设计模式 缓存 安全
【JUC】(6)带你了解共享模型之 享元和不可变 模型并初步带你了解并发工具 线程池Pool,文章内还有饥饿问题、设计模式之工作线程的解决于实现
JUC专栏第六篇,本文带你了解两个共享模型:享元和不可变 模型,并初步带你了解并发工具 线程池Pool,文章中还有解决饥饿问题、设计模式之工作线程的实现
371 2
|
6月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
312 1
|
6月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
320 1
|
7月前
|
Java
java入门代码示例
本文介绍Java入门基础,包含Hello World、变量类型、条件判断、循环及方法定义等核心语法示例,帮助初学者快速掌握Java编程基本结构与逻辑。
556 0
|
7月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
|
7月前
|
Java API 数据库
2025 年最新 Java 实操学习路线,从入门到高级应用详细指南
2025年Java最新实操学习路线,涵盖从环境搭建到微服务、容器化部署的全流程实战内容,助你掌握Java 21核心特性、Spring Boot 3.2开发、云原生与微服务架构,提升企业级项目开发能力,适合从入门到高级应用的学习需求。
2291 0
Java 数据库 Spring
301 0
|
7月前
|
前端开发 Java 数据库连接
帮助新手快速上手的 JAVA 学习路线最详细版涵盖从入门到进阶的 JAVA 学习路线
本Java学习路线涵盖从基础语法、面向对象、异常处理到高级框架、微服务、JVM调优等内容,适合新手入门到进阶,助力掌握企业级开发技能,快速成为合格Java开发者。
1034 3
|
7月前
|
监控 Java API
2025 年全新出炉的 Java 学习路线:从入门起步到实操精通的详细指南
2025年Java学习路线与实操指南,涵盖Java 21核心特性、虚拟线程、Spring Boot 3、微服务、Spring Security、容器化部署等前沿技术,助你从入门到企业级开发进阶。
1524 0