是不是可以回复Callable接口?

时间:2015-03-20 06:33:50

标签: java multithreading callable

  1. 为什么在使用callable创建线程时我们需要FutureTask实例?
  2. 2.我可以看到,使用callbale,我们可以使用futuretask.get()方法获取异常(如果发生)。那么在这种情况下,我们的主线程应该等待线程完成!它不会破坏线程的灵魂目的吗?这不是Callable的缺点吗?

2 个答案:

答案 0 :(得分:1)

V get() throws InterruptedException,ExecutionException
  

如果需要等待计算完成,然后检索   结果。

现在

  

为什么我们在使用线程时需要FutureTask实例   调用

如果您需要可调用的结果,那么您应该使用它

  

我们的主线程应该等到线程完成!

是的,除非你真的需要结果,否则你应该避免使用它

你也可以使用overloaded version这样等待不会是infinite,只要wait()超时就会出现超时异常

答案 1 :(得分:0)

答案:

  1. 您不需要FutureTask,可以将Callable传递给ExecutorService.submit()
  2. get()方法旨在阻止,这不是问题。我们的想法是在后台执行功能,同时您可以执行其他代码,您可以传递{ {1}}使用其他方法等。
  3. FutureTask抛出Callable.call()非常重要。如果查看“标准”Exception,它不会抛出任何已检查的异常,所以在这种情况下在处理错误时,你必须将异常处理逻辑放在Runnable中,只是为了编译你的程序。