2.我可以看到,使用callbale,我们可以使用futuretask.get()方法获取异常(如果发生)。那么在这种情况下,我们的主线程应该等待线程完成!它不会破坏线程的灵魂目的吗?这不是Callable的缺点吗?
答案 0 :(得分:1)
V get() throws InterruptedException,ExecutionException
如果需要等待计算完成,然后检索 结果。
现在
为什么我们在使用线程时需要FutureTask实例 调用
如果您需要可调用的结果,那么您应该使用它
我们的主线程应该等到线程完成!
是的,除非你真的需要结果,否则你应该避免使用它
你也可以使用overloaded version这样等待不会是infinite
,只要wait()
超时就会出现超时异常
答案 1 :(得分:0)
答案:
FutureTask
,可以将Callable
传递给ExecutorService.submit()
。get()
方法旨在阻止,这不是问题。我们的想法是在后台执行功能,同时您可以执行其他代码,您可以传递{ {1}}使用其他方法等。FutureTask
抛出Callable.call()
非常重要。如果查看“标准”Exception
,它不会抛出任何已检查的异常,所以在这种情况下在处理错误时,你必须将异常处理逻辑放在Runnable
中,只是为了编译你的程序。