设定时间的任务
如果某一个子线程任务不能在规定的时间内完成,那么应该抛弃该任务,不再需要其结果,同时中断该任务,减少性能开销。
Future.get
方法有一个重载,传入限制的时间
- 1
- 2
- 1
- 2
如果阻塞时长超过指定的timeout
,将抛出TimeoutException
异常。
简单使用
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
使用ExecutorService
的invokeAll
方法
该方法可以传入一组任务,并给定完成的时间,返回一组Future
, invokeAll
按照任务完成的顺序将Future
添加到返回的集合中; 超过指定时间后,所有未完成的任务将会取消,客户可以通过调用Future
的get
、isCancelled
判断情况。
简单使用
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
invokeAll
添加任务组,线程池处理f.cancel
取消任务,f.isCancelled()
判断任务是否已经取消,如果任务已经取消,再调用get
方法,会抛出CancellationException
异常。- 如果某个任务执行的时间超过指定,抛出
CancellationException
异常,所有剩下的未完成的任务将取消。