isDone()方法:判断线程是否执行完毕 ,执行完毕并不代表成功执行完毕,也可能是中断了不在执行了,获取异常了也都是执行完毕了
isCancelled(): 是否取消
线程池的submit方法返回Future对象:
首先,我们要给线程池提交我们的任务,提交时线程池会立刻返回给我们一个空的future容器。当线程的任务一旦执行完毕,也就是当我们可以获取结果的时候,线程池便会把该结果填入到之前给我们的那个future中去(而不是创建一个新的Future),我们此时便可以从该Future中获取任务的执行结果
cancel方法:取消任务的执行
1.如果这个任务还没执行,那么任务会被正常取消,未来也不会被执行,方法返回true
2.如果任务已完成,或者已经取消;那么cancel()方法会执行失败,方法返回false
3.如果这个任务已经开始执行了,那么这个取消方法将不会直接取消该任务,而是会根据我们填的参数mayInterruptIfRunning做判断:
如果传入的是true,则会发出一个中断信号
如果传入的是false,则不会收到中断信号;
Futrue.cancel(true)适用于:
1.任务能处理interrupt
Future.cancel(false)仅用于避免启动尚未启动的任务,适用于:
1. 未能处理interrupt的任务 2. 不清楚任务是否支持取消 3. 需要等待已经开始的任务执行完成