定时任务

定时任务,顾名思义,不必多释。

 

crontab命令

Linux系统分为两种任务调度。

1、系统任务调度

2、用户任务调度

 

*   *   *   *   *   command

    星期

     月

  日

 时

“,”表示列表范围。1,2,3,7,8

“ - ”表示值的范围。1-6

“ * ”表示任意可能的值。

“ / ”表示时间的间隔频率。例如“0-23/2”,表示每两个小时执行一次

 

JDK Timer

时间不准确延迟:单线程。如果存在多个任务,某个任务因为某种原因导致线程任务执行过久,超过了间隔时间,就会导致任务延迟了。

异常终止:会终止所有任务,未执行的timerTask也不会执行了。

依赖系统时间;会因为时间出现问题。

 

ScheduledExecutor

任务多并发

只是如果执行过程中抛出异常,那么会终止,之后也不会周期性进程

 

Spring Scheduler

 

Quartz

 

分布式定时任务

指的是讲集群中分散的可靠性差的定时任务统一化管理和调度,并实现分布式部署的管理方式。

“抢占式”:谁先获得资源谁能运行

“协同式”:单个任务处理的数据分到多个jvm中处理,提高数据的并行处理能力

一般策略:

1、只在一台服务器上运行

2、通过配置参数分散运行

3、通过全局锁互斥执行

 

分布式定时任务的特点:

高可用:

可伸缩:

负载均衡:

失效转移:

分布式锁的实现方式:

(1)基于数据库:当想要执行任务,先往数据库插入一条数据,插入成功就可以获得,执行完毕后删除对应的行数据。

(2)基于redis:基于setnx实现,当缓存中的key不存在时,才会设置成功。

(3)基于zooKeeper:创建一个锁目录lock,如果线程A需要获得锁就在lock目录下创建临时顺序节点,在查询锁目录下所有子节点,寻找比自己小的兄弟节点,不存在则说明当前线程顺序号最小,则可以获得锁。线程B如果想获得锁同样查询所有的节点,判断自己是不是最小的,如果不是,则监听比自己值小的。线程A处理完成,删除自己的节点,线程B监听到变更事件,判断自己是不是最小的节点,如果是,则获得锁。

posted @ 2019-12-18 10:58  碧落君  阅读(160)  评论(0编辑  收藏  举报