java线程池的四种创建方式详细分析

作者:码农研究僧 时间:2022-10-20 22:32:41 

前言

在讲述线程池的前提 先补充一下连接池的定义

连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用

可以看到其连接池的作用如下:

java线程池的四种创建方式详细分析

1. 线程池

线程池(英语:thread pool):一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度

特点:

  • 降低资源消耗: 通过重复利用已创建的线程降低线程创建和销毁造成的销耗。提高响应速度: 当任务到达时,任务可以不需要等待线程创建就能立即执行。提高线程的可管理性: 线程是稀缺资源,如果无限制的创建,不仅会销耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。

其功能为:

重用存在的线程,减少对象创建、消亡的开销可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。提供定时执行、定期执行、单线程、并发数控制等功能。

具体其架构如下所示:

java线程池的四种创建方式详细分析

2. 创建方式

一共有4种创建方式分别为一池一线程、一池n线程、一池可扩容线程、一池定时及周期线程

Executors.newFixedThreadPool(int)一池N线程,控制最大的并发数,超出的线程会在队列中等待

ExecutorService threadPool1 = Executors.newFixedThreadPool(5); //5个窗口

Executors.newSingleThreadExecutor()一池一线程

ExecutorService threadPool2 = Executors.newSingleThreadExecutor(); //一个窗口

Executors.newCachedThreadPool()一池可扩容根据需求创建线程,可灵活回收空闲线程
执行完线程,可不用再扩建继续使用

ExecutorService threadPool3 = Executors.newCachedThreadPool();

Executors.newScheduledThreadPool(),支持定时及周期性任务执行

//表示延迟一秒,后执行3秒
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
scheduledThreadPool.scheduleAtFixedRate(new Runnable() {
     @Override
     public void run() {
         log.info("delay 1 seconds, and excute every 3 seconds");

}
}, 1, 3, TimeUnit.SECONDS);

来源:https://blog.csdn.net/weixin_47872288/article/details/122086158

标签:java,线程池,创建,方式
0
投稿

猜你喜欢

  • Android自定义View实现课程表表格

    2023-03-11 19:33:08
  • C#多线程之线程同步WaitHandle

    2022-08-10 10:16:12
  • Java如何获取对象属性及对应值

    2022-03-30 07:03:05
  • request如何获取body的json数据

    2021-11-16 20:30:31
  • Java java.lang.ExceptionInInitializerError 错误如何解决

    2021-06-11 10:46:24
  • Java多线程编程实战之模拟大量数据同步

    2023-09-02 21:15:59
  • java开发MVC三层架构上再加一层Manager层原理详解

    2023-06-14 06:10:51
  • Unity shader实现高斯模糊效果

    2023-11-17 20:23:45
  • 简单实现Java版学生管理系统

    2022-06-22 15:16:19
  • Java通过HttpClient进行HTTP请求的代码详解

    2022-06-04 09:50:20
  • Java正确使用访问修饰符的姿势

    2021-10-11 09:52:50
  • 简单了解java标识符的作用和命名规则

    2022-06-18 17:49:09
  • android短信管理器SmsManager实例详解

    2021-09-03 18:17:18
  • Java中 ? extends T 和 ? super T的理解

    2022-06-26 19:50:23
  • Android PopupWindow 点击外面取消实现代码

    2022-02-04 20:52:05
  • c++ 预处理的图灵完备之引言

    2023-02-20 01:37:20
  • WPF InkCanvas基本操作方法详解

    2023-07-29 06:26:59
  • 详解Mybatis多参数传递入参四种处理方式

    2022-12-27 15:18:20
  • Android小程序实现选项菜单

    2022-04-12 00:34:01
  • 使用 Lambda 取代 Android 中的匿名类

    2023-11-16 14:01:04
  • asp之家 软件编程 m.aspxhome.com