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()


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

相关文章
|
23小时前
|
消息中间件 缓存 NoSQL
Java多线程实战-CompletableFuture异步编程优化查询接口响应速度
Java多线程实战-CompletableFuture异步编程优化查询接口响应速度
|
23小时前
|
安全 调度
多线程入门
多线程入门
|
1天前
|
数据采集 存储 Java
高德地图爬虫实践:Java多线程并发处理策略
高德地图爬虫实践:Java多线程并发处理策略
|
1天前
|
安全 算法 Java
JavaSE&多线程&线程池
JavaSE&多线程&线程池
15 7
|
1天前
|
Java 开发工具 Windows
Java入门及环境变量
Java入门及环境变量
|
1天前
|
缓存 Java
【Java基础】简说多线程(上)
【Java基础】简说多线程(上)
5 0
|
2天前
|
Java API 调度
[AIGC] 深入理解Java并发编程:从入门到进阶
[AIGC] 深入理解Java并发编程:从入门到进阶
|
2天前
|
Java Nacos 开发者
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
|
2天前
|
前端开发 Java 测试技术
Java从入门到精通:4.1.1参与实际项目,锻炼编程与问题解决能力
Java从入门到精通:4.1.1参与实际项目,锻炼编程与问题解决能力
|
2天前
|
Java 程序员 数据库连接
Java从入门到精通:3.3.2性能优化与调优——内存管理篇
Java从入门到精通:3.3.2性能优化与调优——内存管理篇
Java从入门到精通:3.3.2性能优化与调优——内存管理篇