java定时器实现原理(java定时任务时间设置)

  定时器相信大家都不陌生,平时使用定时器就像使用闹钟一样,我们可以在固定的时间做某件事,也可以在固定的时间段重复做某件事。在JAVA开发领域,目前可以通过以下几种方式进行定时任务

image.png

  1、单机部署模式

  Timer:jdk中自带的一个定时调度类,可以简单的实现按某一频度进行任务执行。提供的功能比较单一,无法实现复杂的调度任务。

  ScheduledExecutorService:也是jdk自带的一个基于线程池设计的定时任务类。其每个调度任务都会分配到线程池中的一个线程执行,所以其任务是并发执行的,互不影响。

  Spring Task:Spring提供的一个任务调度工具,支持注解和配置文件形式,支持Cron表达式,使用简单但功能强大。

  Quartz:一款功能强大的任务调度器,可以实现较为复杂的调度功能,如每月一号执行、每天凌晨执行、每周五执行等等,还支持分布式调度,就是配置稍显复杂。

  2、分布式集群模式(不多介绍,简单提一下)

  问题:

  I、如何解决定时任务的多次执行?

  II、如何解决任务的单点问题,实现任务的故障转移?

  问题I的简单思考:

  1、固定执行定时任务的机器(可以有效避免多次执行的情况 ,缺点就是单点故障问题)。

  2、借助Redis的过期机制和分布式锁。

  3、借助mysql的锁机制等。


发表评论

评论列表

还没有评论,快来说点什么吧~