Java的四种常见线程池及Scheduled定时线程池实现详解

 更新时间:2023年09月21日 10:11:48   作者:甜瓜瓜哥  
这篇文章主要介绍了Java的四种常见线程池及Scheduled定时线程池实现详解,在Java中,我们可以通过Executors类来创建ScheduledThreadPool,Executors类提供了几个静态方法来创建不同类型的线程池,包括ScheduledThreadPool,需要的朋友可以参考下

四种常见线程池

1. FixedThreadPool(固定大小线程池)

该线程池包含固定数量的线程,当有新任务提交时,如果线程池中有空闲线程,则立即执行;如果没有空闲线程,则任务将等待,直到有空闲线程为止。

2. CachedThreadPool(缓存线程池)

该线程池可以根据需要创建新线程,如果有空闲线程可用,则会重用空闲线程;如果没有可用线程,则会创建新线程。适用于任务执行时间短暂的情况。

3. SingleThreadExecutor(单线程线程池)

该线程池只有一个工作线程,所有任务按照提交顺序依次执行。

4. ScheduledThreadPool(定时线程池)

该线程池用于执行延迟任务或定期任务,可以指定任务的延迟时间或执行周期。

ScheduledThreadPool的实现

在Java中,我们可以通过Executors类来创建ScheduledThreadPool。Executors类提供了几个静态方法来创建不同类型的线程池,包括ScheduledThreadPool。

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduledThreadPoolExample {
    public static void main(String[] args) {
        // 创建ScheduledThreadPool,参数为线程池的大小
        ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(3);
        // 延迟1秒后执行任务
        scheduledThreadPool.schedule(new RunnableTask(), 1, TimeUnit.SECONDS);
        // 延迟2秒后执行任务,并且每隔3秒执行一次
        scheduledThreadPool.scheduleAtFixedRate(new RunnableTask(), 2, 3, TimeUnit.SECONDS);
        // 延迟2秒后执行任务,任务执行完成后,再延迟3秒执行下一次任务
        scheduledThreadPool.scheduleWithFixedDelay(new RunnableTask(), 2, 3, TimeUnit.SECONDS);
        // 关闭线程池
        scheduledThreadPool.shutdown();
    }
    static class RunnableTask implements Runnable {
        @Override
        public void run() {
            System.out.println("Task is running. Thread: " + Thread.currentThread().getName());
        }
    }
}

在上面的例子中,我们创建了一个大小为3的 ScheduledThreadPool ,并使用 schedule() 、 scheduleAtFixedRate() 和 scheduleWithFixedDelay() 方法来安排任务的执行。

schedule() 方法用于延迟执行一次任务, scheduleAtFixedRate() 和 scheduleWithFixedDelay() 方法用于周期性地执行任务。

shutdown() 方法用于关闭线程池,不再接受新的任务提交,但会等待已经提交的任务执行完成。如果你希望立即停止所有任务并关闭线程池,可以使用 shutdownNow() 方法。

到此这篇关于Java的四种常见线程池及Scheduled定时线程池实现详解的文章就介绍到这了,更多相关Java常见线程池内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Springboot配置Swagger的实现示例

    Springboot配置Swagger的实现示例

    Swagger 是一种提高 API 开发和维护效率的工具,它使开发者能够更轻松地构建、测试和文档化 API,本文主要介绍了Springboot配置Swagger的实现示例,感兴趣的可以了解一下
    2023-10-10
  • 解决Mybatis中result标签识别不了的情况

    解决Mybatis中result标签识别不了的情况

    这篇文章主要介绍了解决Mybatis中result标签识别不了的情况,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教。
    2022-01-01
  • springboot中项目启动时实现初始化方法加载参数

    springboot中项目启动时实现初始化方法加载参数

    这篇文章主要介绍了springboot中项目启动时实现初始化方法加载参数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Java利用Phantomjs实现生成图片的功能

    Java利用Phantomjs实现生成图片的功能

    这篇文章主要介绍了Java利用Phantomjs实现生成图片的功能,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • 图文详解Java的反射机制

    图文详解Java的反射机制

    反射就是Reflection,Java的反射是指程序在运行期可以拿到一个对象的所有信息。反射机制是框架的灵魂,一个java程序员不能不会使用反射,本文就来和大家一起详细聊聊Java的反射机制
    2022-08-08
  • SpringMVC中的DispatcherServlet详细解析

    SpringMVC中的DispatcherServlet详细解析

    这篇文章主要介绍了SpringMVC中的DispatcherServlet详细解析,DispatcherServlet也是一个Servlet,它也能通过Servlet的API来响应请求,从而成为一个前端控制器,Web容器会调用Servlet的doGet()以及doPost()等方法,需要的朋友可以参考下
    2023-12-12
  • FreeMarker如何调用Java静态方法及静态变量方法

    FreeMarker如何调用Java静态方法及静态变量方法

    这篇文章主要介绍了FreeMarker如何调用Java静态方法及静态变量方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Java合并区间的实现

    Java合并区间的实现

    本文主要介绍了Java合并区间的实现,通过合理使用集合类和排序算法,可以有效地解决合并区间问题,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • Spring Boot 内置工具类ReflectionUtils的实现

    Spring Boot 内置工具类ReflectionUtils的实现

    ReflectionUtils是一个反射工具类,它封装了Java反射的操作,使得我们能够更轻松地操作和访问类的方法、字段,本文主要介绍了Spring Boot 内置工具类ReflectionUtils的实现,感兴趣的可以了解一下
    2023-11-11
  • Java基础之Maven详解

    Java基础之Maven详解

    这篇文章主要介绍了Java基础之Maven详解,文中有非常详细的代码示例,对正在学习java基础的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04

最新评论