|
|
@@ -1,6 +1,9 @@
|
|
|
package cn.hutool.cron;
|
|
|
|
|
|
+import java.io.Serializable;
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.List;
|
|
|
import java.util.TimeZone;
|
|
|
import java.util.concurrent.locks.Lock;
|
|
|
import java.util.concurrent.locks.ReadWriteLock;
|
|
|
@@ -13,25 +16,25 @@ import cn.hutool.cron.task.Task;
|
|
|
* 定时任务表<br>
|
|
|
* 任务表将ID、表达式、任务一一对应,定时任务执行过程中,会周期性检查定时任务表中的所有任务表达式匹配情况,从而执行其对应的任务<br>
|
|
|
* 任务的添加、移除使用读写锁保证线程安全性
|
|
|
- *
|
|
|
- * @author Looly
|
|
|
*
|
|
|
+ * @author Looly
|
|
|
*/
|
|
|
-public class TaskTable {
|
|
|
+public class TaskTable implements Serializable {
|
|
|
+ private static final long serialVersionUID = 1L;
|
|
|
|
|
|
private ReadWriteLock lock = new ReentrantReadWriteLock();
|
|
|
|
|
|
private Scheduler scheduler;
|
|
|
private TimeZone timezone;
|
|
|
|
|
|
- private ArrayList<String> ids = new ArrayList<>();
|
|
|
- private ArrayList<CronPattern> patterns = new ArrayList<>();
|
|
|
- private ArrayList<Task> tasks = new ArrayList<>();
|
|
|
+ private List<String> ids = new ArrayList<>();
|
|
|
+ private List<CronPattern> patterns = new ArrayList<>();
|
|
|
+ private List<Task> tasks = new ArrayList<>();
|
|
|
private int size;
|
|
|
|
|
|
/**
|
|
|
* 构造
|
|
|
- *
|
|
|
+ *
|
|
|
* @param scheduler {@link Scheduler}
|
|
|
*/
|
|
|
public TaskTable(Scheduler scheduler) {
|
|
|
@@ -41,10 +44,10 @@ public class TaskTable {
|
|
|
|
|
|
/**
|
|
|
* 新增Task
|
|
|
- *
|
|
|
- * @param id ID
|
|
|
+ *
|
|
|
+ * @param id ID
|
|
|
* @param pattern {@link CronPattern}
|
|
|
- * @param task {@link Task}
|
|
|
+ * @param task {@link Task}
|
|
|
* @return this
|
|
|
*/
|
|
|
public TaskTable add(String id, CronPattern pattern, Task task) {
|
|
|
@@ -65,8 +68,56 @@ public class TaskTable {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 获取所有ID,返回不可变列表,即列表不可修改
|
|
|
+ *
|
|
|
+ * @return ID列表
|
|
|
+ * @since 4.6.7
|
|
|
+ */
|
|
|
+ public List<String> getIds() {
|
|
|
+ final Lock readLock = lock.readLock();
|
|
|
+ try {
|
|
|
+ readLock.lock();
|
|
|
+ return Collections.unmodifiableList(this.ids);
|
|
|
+ } finally {
|
|
|
+ readLock.unlock();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取所有定时任务表达式,返回不可变列表,即列表不可修改
|
|
|
+ *
|
|
|
+ * @return 定时任务表达式列表
|
|
|
+ * @since 4.6.7
|
|
|
+ */
|
|
|
+ public List<CronPattern> getPatterns() {
|
|
|
+ final Lock readLock = lock.readLock();
|
|
|
+ try {
|
|
|
+ readLock.lock();
|
|
|
+ return Collections.unmodifiableList(this.patterns);
|
|
|
+ } finally {
|
|
|
+ readLock.unlock();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取所有定时任务,返回不可变列表,即列表不可修改
|
|
|
+ *
|
|
|
+ * @return 定时任务列表
|
|
|
+ * @since 4.6.7
|
|
|
+ */
|
|
|
+ public List<Task> getTasks() {
|
|
|
+ final Lock readLock = lock.readLock();
|
|
|
+ try {
|
|
|
+ readLock.lock();
|
|
|
+ return Collections.unmodifiableList(this.tasks);
|
|
|
+ } finally {
|
|
|
+ readLock.unlock();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 移除Task
|
|
|
- *
|
|
|
+ *
|
|
|
* @param id Task的ID
|
|
|
*/
|
|
|
public void remove(String id) {
|
|
|
@@ -84,11 +135,11 @@ public class TaskTable {
|
|
|
writeLock.unlock();
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 更新某个Task的定时规则
|
|
|
- *
|
|
|
- * @param id Task的ID
|
|
|
+ *
|
|
|
+ * @param id Task的ID
|
|
|
* @param pattern 新的表达式
|
|
|
* @return 是否更新成功,如果id对应的规则不存在则不更新
|
|
|
* @since 4.0.10
|
|
|
@@ -110,7 +161,7 @@ public class TaskTable {
|
|
|
|
|
|
/**
|
|
|
* 获得指定位置的{@link Task}
|
|
|
- *
|
|
|
+ *
|
|
|
* @param index 位置
|
|
|
* @return {@link Task}
|
|
|
* @since 3.1.1
|
|
|
@@ -127,7 +178,7 @@ public class TaskTable {
|
|
|
|
|
|
/**
|
|
|
* 获得指定id的{@link Task}
|
|
|
- *
|
|
|
+ *
|
|
|
* @param id ID
|
|
|
* @return {@link Task}
|
|
|
* @since 3.1.1
|
|
|
@@ -142,7 +193,7 @@ public class TaskTable {
|
|
|
|
|
|
/**
|
|
|
* 获得指定位置的{@link CronPattern}
|
|
|
- *
|
|
|
+ *
|
|
|
* @param index 位置
|
|
|
* @return {@link CronPattern}
|
|
|
* @since 3.1.1
|
|
|
@@ -159,7 +210,7 @@ public class TaskTable {
|
|
|
|
|
|
/**
|
|
|
* 任务表大小,加入的任务数
|
|
|
- *
|
|
|
+ *
|
|
|
* @return 任务表大小,加入的任务数
|
|
|
* @since 4.0.2
|
|
|
*/
|
|
|
@@ -169,7 +220,7 @@ public class TaskTable {
|
|
|
|
|
|
/**
|
|
|
* 任务表是否为空
|
|
|
- *
|
|
|
+ *
|
|
|
* @return true为空
|
|
|
* @since 4.0.2
|
|
|
*/
|
|
|
@@ -179,7 +230,7 @@ public class TaskTable {
|
|
|
|
|
|
/**
|
|
|
* 获得指定id的{@link CronPattern}
|
|
|
- *
|
|
|
+ *
|
|
|
* @param id ID
|
|
|
* @return {@link CronPattern}
|
|
|
* @since 3.1.1
|
|
|
@@ -194,7 +245,7 @@ public class TaskTable {
|
|
|
|
|
|
/**
|
|
|
* 如果时间匹配则执行相应的Task,带读锁
|
|
|
- *
|
|
|
+ *
|
|
|
* @param millis 时间毫秒
|
|
|
*/
|
|
|
public void executeTaskIfMatch(long millis) {
|
|
|
@@ -209,7 +260,7 @@ public class TaskTable {
|
|
|
|
|
|
/**
|
|
|
* 如果时间匹配则执行相应的Task,无锁
|
|
|
- *
|
|
|
+ *
|
|
|
* @param millis 时间毫秒
|
|
|
* @since 3.1.1
|
|
|
*/
|