有没有办法理解为什么 java.util.concurrent.Future 取消失败?
Is there a way to understand why java.util.concurrent.Future is failed to cancel?
我 运行 一个应用程序,它安排每 X 次做一些工作,为此我使用了 ScheduledExecutorService
和 java.util.concurrent.Future
。
一切正常,但我想解决未来可能出现的问题,为此我想记录失败的原因。
示例:
private ScheduledExecutorService executeScheduler = Executors.newSingleThreadScheduledExecutor();
private ScheduledFuture doSomthing = executeScheduler.scheduleAtFixedRate(() -> {DO SOMETHING} , 1000, 1000, MILLISECONDS);
if(doSomthing.cancel(!true)){
logger.warn("WHY FAILED");
}
java.util.concurrent.Future
如果任务已经完成、已经取消或由于其他原因无法取消,.cancel() 将失败。如果成功,并且调用取消时此任务尚未开始,则此任务永远不会 运行。如果任务已经启动,则 .cancel(true/false)
参数确定是否应中断执行此任务的线程以尝试停止任务。
如果您使用 (true) 并且您的线程/{DO SOMTHING} 被打断,您可以通过调用
doSomthing.get()
.它抛出 InterruptedException,ExecutionException;
所以你应该用 try/catch.
包装它
请注意 .get() 锁定并且 return 只是一个可抛出的对象。但在您的情况下,很明显原因是 InterruptedException,
或者,也许您一开始就不想使用那个 .cancel?
如果您尝试捕获一般的 运行ning 异常,您必须将一个大的 try/catch 包装在您的线程 运行 方法中或就在这里:
{DO SOMETHING}
我 运行 一个应用程序,它安排每 X 次做一些工作,为此我使用了 ScheduledExecutorService
和 java.util.concurrent.Future
。
一切正常,但我想解决未来可能出现的问题,为此我想记录失败的原因。
示例:
private ScheduledExecutorService executeScheduler = Executors.newSingleThreadScheduledExecutor();
private ScheduledFuture doSomthing = executeScheduler.scheduleAtFixedRate(() -> {DO SOMETHING} , 1000, 1000, MILLISECONDS);
if(doSomthing.cancel(!true)){
logger.warn("WHY FAILED");
}
java.util.concurrent.Future
如果任务已经完成、已经取消或由于其他原因无法取消,.cancel() 将失败。如果成功,并且调用取消时此任务尚未开始,则此任务永远不会 运行。如果任务已经启动,则 .cancel(true/false)
参数确定是否应中断执行此任务的线程以尝试停止任务。
如果您使用 (true) 并且您的线程/{DO SOMTHING} 被打断,您可以通过调用 doSomthing.get() .它抛出 InterruptedException,ExecutionException; 所以你应该用 try/catch.
包装它请注意 .get() 锁定并且 return 只是一个可抛出的对象。但在您的情况下,很明显原因是 InterruptedException, 或者,也许您一开始就不想使用那个 .cancel?
如果您尝试捕获一般的 运行ning 异常,您必须将一个大的 try/catch 包装在您的线程 运行 方法中或就在这里:
{DO SOMETHING}