当前位置: 代码迷 >> 综合 >> Java Callable、Future、FutureTask
  详细解决方案

Java Callable、Future、FutureTask

热度:45   发布时间:2023-12-18 09:30:31.0

通过它们可以在任务执行完毕之后得到任务执行结果

【Callable】
继承Callable接口,实现call()方法,可以有【返回值】!

class C implements Callable{@Overridepublic String call() throws Exception {return "hhhhh";}
}

【Future】
Future就是对于具体的Runnable或者Callable任务的执行结果进行取消、查询是否完成、获取结果。必要时可以通过get方法获取执行结果,该方法会阻塞直到任务返回结果。
Future future = pool.submit(new C());

1.future.cancel(mayInterruptIfRunning)
用来取消任务,如果取消任务成功则返回true,如果取消任务失败则返回false。参数mayInterruptIfRunning表示是否允许取消正在执行却没有执行完毕的任务,如果设置true,则表示可以取消正在执行过程中的任务。如果任务已经完成,则无论mayInterruptIfRunning为true还是false,此方法肯定返回false,即如果取消已经完成的任务会返回false;如果任务正在执行,若mayInterruptIfRunning设置为true,则返回true,若mayInterruptIfRunning设置为false,则返回false;如果任务还没有执行,则无论mayInterruptIfRunning为true还是false,肯定返回true。

2.future.isCancelled()
表示任务是否被取消成功,如果在任务正常完成前被取消成功,则返回 true。

3.future.isDone()
表示任务是否已经完成,若任务完成,则返回true;

4.future.get()
用来获取执行结果,这个方法会产生阻塞,会一直等到任务执行完毕才返回;

5.future.get(long timeout, TimeUnit unit)
用来获取执行结果,如果在指定时间内,还没获取到结果,就直接返回null。

【FutureTask】

FutureTask futureTask=new FutureTask(new C());
pool.submit(futureTask);
System.out.println(futureTask.get());
  相关解决方案