我想在任务运行时立即终止(或中止)任务,而不是等待其结束。我在JDK中搜索,Timer 类和 TimerTask 类不满意,它们的取消方法不适合我,因为任务会连续执行它完成,但我想立即停止它。
我该怎么办?我为春天和石英找了,但没有好主意...
不建议在多线程环境中执行此操作,因为它可能会以各种方式破坏您的代码。例如,假设您正在更改某些内容进行一半,突然您的线程被杀死,使其处于半修改状态。因为不建议这样做,所以没有提供简单的方法来做到这一点。
执行此操作的正确方法是使用线程并interrupt
它。
http://docs.oracle.com/javase/tutorial/essential/concurrency/interrupt.html
在您的 Thread 代码中,您可以在适合中止和中止的时间检查isInterrupted()
,但中止由正在运行的线程控制,这是唯一知道何时安全这样做的事情。
该ScheduledExecutorService
还允许您使用ScheduledFuture
并cancel
该,然后以与中断线程相同的方式工作。
http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html#cancel(布尔值)