我使用
调用了一个CallableFutureTask<Integer> task = new FutureTask<Integer>(new MyCallable(name, type));
pool = Executors.newSingleThreadExecutor();
pool.submit(task);
我想知道在pool.submit(task)
之后执行是继续还是等待callable完成执行?
简而言之,我只是想知道是否有像Callable这样的thread.join()
方法?
答案 0 :(得分:11)
...有什么方法可以像Callable一样使用thread.join()吗?
pool.submit(callable)
方法返回Future
,如果池中的线程可用,它将立即开始执行。要执行join
,您可以调用与该线程连接的future.get()
,返回call()
方法返回的值。请务必注意,如果get()
方法投放,ExecutionException
可能会抛出call()
。
您不 将Callable
包裹在FutureTask
中。线程池为您做到了这一点。所以你的代码是:
pool = Executors.newSingleThreadExecutor();
Future<String> future = pool.submit(new MyCallable(name, type));
// now you can do something in the foreground as your callable runs in the back
// when you are ready to get the background task's result you call get()
// get() waits for the callable to return with the value from call
// it also may throw an exception if the call() method threw
String value = future.get();
如果您的MyCallable
当然实施Callable<String>
。 Future<?>
将匹配Callable
所属的任何类型。
答案 1 :(得分:1)
task.get()
(任务为FutureTask
)期望当前线程等待线程池完成托管任务。
此方法最终返回具体结果或抛出相同的已检查异常(尽管包装在ExecutionException中),作业线程将在其任务期间抛出该异常。