Java “TimeoutException”和“CancellationException”之间的差异`
据Javadoc说,, 抛出Java “TimeoutException”和“CancellationException”之间的差异`,java,multithreading,executorservice,Java,Multithreading,Executorservice,据Javadoc说,, 抛出TimeoutException和CancellationException以及另外两个异常 TimeoutException和CancellationException之间有什么区别 据我所知,CancellationException在线程超时时抛出,因此执行器取消了它。但是什么时候抛出TimeoutException? 是否存在超时线程超时而未取消的情况 锯和敲别人 蒂亚 //--------------- 更新 除非开发人员明确地调用,否则没有人调用Futur
TimeoutException
和CancellationException
以及另外两个异常
TimeoutException
和CancellationException
之间有什么区别
据我所知,CancellationException
在线程超时时抛出,因此执行器取消了它。但是什么时候抛出TimeoutException
?
是否存在超时线程超时而未取消的情况
锯和敲别人
蒂亚
//---------------
更新
除非开发人员明确地调用,否则没有人调用Future.cancel()
没有提到任何关于它引起的CancellationException
我有一个代码进入系统,由于特定的时间限制,我可能不得不取消该代码。但是,我必须能够知道Future.cancel()
何时返回true,因为任务已完成或已取消。
从表面上看,
Future.cancel()
在这两种情况下都返回trueFuture.isDone()
或其任何其他方法都没有帮助 CancellationException在取消任务时通过调用引发
当您要求get()
等待结果的给定时间时,会引发TimeoutException,并且生成结果所需的时间超过该时间
线程不会超时。执行者不会取消线程。当任务被取消时,通过调用将引发CancellationException 当您要求
get()
等待结果的给定时间时,会引发TimeoutException,并且生成结果所需的时间超过该时间
线程不会超时。执行器不会取消线程
据我所知,CancellationException
在线程超时时抛出,因此执行器取消了它
否。CancellationException
如果在任务完成之前调用了Future
的cancel()
方法,并且随后调用了它的get()
方法,则会引发异常
但是什么时候抛出TimeoutException呢
TimeoutException
(不是CancellationException
)是由Future引发的。如果指定的时间未完成任务,则获取(long,Timeunit)
是否存在超时线程超时而未取消的情况
对。超时与取消完全不是一回事
关于更新:
除非开发人员明确地调用,否则没有人调用Future.cancel()
只有对所讨论的特定未来
有引用的人才能调用其cancel()
方法。如果您的意思是这样的话,ExecutorService
不会调用它,特别是超时与取消不同,因此不会导致CancellationException
s
javadoc没有提到由它引起的CancellationException
Future.cancel()
的Javadoc没有提到它,我也不认为有这样做的特殊需要。解释它的意义,以及那些Future
方法的javadocs,它们可以将它抛出它们所做的文档
我有一个代码进入系统,由于特定的时间限制,我可能不得不取消该代码
因此,听起来您将调用两个参数版本的Future.get()
,以指定时间限制,然后在超时的情况下(由TimeoutException
发出信号),您将调用Future.cancel()
但是,我必须能够知道Future.cancel()
何时返回true
,因为任务已完成或已取消。从表面上看,Future.cancel()
在这两种情况下都返回true
你从哪里得到的?您自己引用的Future.cancel()
的文档表示该方法返回
false
如果任务无法取消,通常是因为它已经正常完成<代码>真值否则
因此,如果Future.cancel()
方法将抛出取消异常
。如果它还没有启动,那么它永远不会启动;如果它已经启动,那么它就会被中断
后一种选择要求将true
传递给Future.cancel()
,在这种情况下,任务实际停止取决于其实现对其线程被中断的响应。如果任务没有实际停止运行,则取消正在进行的任务是否被视为成功尚不清楚;这实际上可能取决于实现
据我所知,CancellationException
在线程超时时抛出,因此执行器取消了它
否。CancellationException
如果在任务完成之前调用了Future
的cancel()
方法,并且随后调用了它的get()
方法,则会引发异常
但是什么时候抛出TimeoutException呢
TimeoutException
(不是CancellationException
)是由Future引发的。如果指定的时间未完成任务,则获取(long,Timeunit)
是否存在超时线程超时而未取消的情况
对。超时与取消完全不是一回事
关于
// keep running until we are interrupted
while (!Thread.currentThread.isInterrupted()) {
...
}