我正在使用 ScheduledExecutorService 并提交这样的任务:
future = scheduledExecutorService.schedule(myRunnableTask, delay, timeunit)
然而,某个事件可能会在不确定的时间后发生,这表明不再需要此任务。所以我需要取消这个任务,我正在使用
boolean cancelled = future.cancel(false)
线。
取消后,我必须根据提交的可运行文件是否实际运行来采取不同的操作。在这里,让我们首先进入 Oracle 文档并阅读cancelled
标志的含义:
https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html#cancel(boolean)
返回:如果任务无法取消,则返回 false,通常是因为它已经正常完成;否则为真
这就是关于返回值的全部内容。似乎写这个文本行的人不确定false
这里的返回值,但我想我可以接受。
现在让我们专注于案例,当它返回时true
。这里有两种可能:
该任务实际上已被取消并且 runnable 从未运行过。
可运行对象正在运行,因此无法取消。(除非我做了一些线程中断逻辑,我真的不想这样做)
我对这两种情况都没有意见,但我想知道实际发生了哪一种情况并采取相应的行动。如果runnable正在处理中,那么我可以接受它完成它的工作,我想等待它完成然后做一件事。但如果它被取消并且根本不会运行,我想做另一件事。
你能推荐一种方法吗?我错过了什么吗?
料青山看我应如是
千万里不及你
相关分类