Future get
get方法的行为取决于Callable任务的状态,只有以下这5种情况∶
1.任务正常完成:get方法会立刻返回结果
2.任务尚未完成(任务还没开始或进行中) : get将阻塞并直到任务完成
3.任务执行过程中抛出Exception : get方法会抛出
ExecutionException:这里的抛出异常,是call()执行时产生的那个异常,看到这个异常类型是
java.util.concurrent.ExecutionException。不论call()执行时抛出的异常类型是什么,最后get方法抛出的异常类型都是
ExecutionException。
4.任务被取消:get方法会抛出CancellationException
5.任务超时:get方法有一个重载方法,是传入一个延迟时间的,如果时间到了还没有获得结果,get方法就会抛出
TimeoutException。
取消
1.如果这个任务还没有开始执行,那么这种情况最简单,任务会被正常的取消,未来也不会被执行,方法返回true。
2.如果任务已完成,或者已取消:那么cancel()方法会执行失败,方法返回false。
3.如果这个任务已经开始执行了,那么这个取消方法将不会直接取消该任务,而是会根据我们填的参数mayInterruptIfRunning做判断。
获取子线程结果
最新推荐文章于 2023-01-05 14:13:10 发布