有个定时任务 scheduler.scheduleAtFixedRate,每隔 5s 去执行检查 redis 某个 key,存在则继续逻辑,不存在则不往下走,但这个定时任务还是一直运行的。有什么方法在 run 的时候如果 redis 的 key 不存在把这个 Task 删除掉或取消掉
![]() | 1 codingKingKong 2018-10-23 11:11:21 +08:00 没有试验, 试试这个? ```java /** * Terminates this timer, discarding any currently scheduled tasks. * Does not interfere with a currently executing task (if it exists). * Once a timer has been terminated, its execution thread terminates * gracefully, and no more tasks may be scheduled on it. * * <p>Note that calling this method from within the run method of a * timer task that was invoked by this timer absolutely guarantees that * the ongoing task execution is the last task execution that will ever * be performed by this timer. * * <p>This method may be called repeatedly; the second and subsequent * calls have no effect. */ public void cancel() ``` |
![]() | 2 gaius 2018-10-23 11:13:53 +08:00 用一个线程做? |
3 kanepan19 2018-10-23 11:17:18 +08:00 当然可以 任务提交的时候会返回一个期望, 然后 future.cancel() |
![]() | 4 D3EP 2018-10-23 12:09:49 +08:00 每次执行完 task 再去注册 task 就行了。 |
![]() | 5 D3EP 2018-10-23 12:10:04 +08:00 直接用 schedule。 |
7 honeycomb &nbp;2018-10-23 18:43:08 +08:00 via Android |
![]() | 8 D3EP 2018-10-23 22:42:17 +08:00 ```java public class Main { private static final ScheduledExecutorService EXECUTOR_SERVICE = Executors.newSingleThreadScheduledExecutor(); public static void main(String[] args) { EXECUTOR_SERVICE.schedule(Main::task, 1, TimeUnit.SECONDS); } public static void task(){ if (true) { System.out.println("Continue"); EXECUTOR_SERVICE.schedule(Main::task, 1, TimeUnit.SECONDS); }else { System.out.println("Exit"); } } } ``` |
9 mayowwwww 2018-10-23 23:59:39 +08:00 ![]() 抛出一个运行时异常。 |
10 lihongjie0209 2018-10-24 08:54:20 +08:00 |