AKS*_*KSG 13 java concurrency future interrupt
有没有办法在不取消它的情况下打断未来?
boolean cancel(boolean mayInterruptIfRunning)
尝试取消执行此任务.如果任务已完成,已取消或由于某些其他原因无法取消,则此尝试将失败.如果成功,并且在调用cancel时此任务尚未启动,则此任务永远不会运行.如果任务已经启动,则mayInterruptIfRunning参数确定执行此任务的线程是否应该在尝试停止任务时被中断.
要捕获中断,我们必须正确捕获Interrupted Exception或检查Runnable/Callable方法中的isInterrupted()方法.
但是没有办法使用Future接口中断正在运行的Future
由于所有线程都在Executor Service池中,因此没有人可以执行thread.interrupt().这就是为什么假设只有当Future被取消或线程池终止时才会出现任何中断?
我试图理解为什么Future接口中没有中断方法.任何帮助将不胜感激
原因是因为抽象的差异是Future和线程中的具体执行.我们不能说未来是否与单线程或多线程相关联.未来可能会开始新的线程,开始新的未来等等.
将这些抽象视为客户代码与期货执行者之间的交互.从概念上讲,说"取消我要求你做的任务"是有道理的,因为你的任务是取消.我可能正在忙着工作,或者我可能还没有开始工作,或者它可能已经完成但是一切都很好,如果你想要我,我会取消它.这就是为什么我们有一个取消方法.
另一方面,说"打断你的任务"并没有多大意义.由于操作结果(Future)和执行模型(比如Executor)之间的分离,客户端不知道正在采取什么操作来完成任务.那么如何能够让客户知道中断何时适当,需要或甚至支持.
| 归档时间: |
|
| 查看次数: |
5049 次 |
| 最近记录: |