如何让Callable等到执行?

时间:2012-09-27 12:09:01

标签: java multithreading task callable

我使用

调用了一个Callable
FutureTask<Integer> task = new FutureTask<Integer>(new MyCallable(name, type));
pool = Executors.newSingleThreadExecutor();
pool.submit(task);

我想知道在pool.submit(task)之后执行是继续还是等待callable完成执行?

简而言之,我只是想知道是否有像Callable这样的thread.join()方法?

2 个答案:

答案 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中),作业线程将在其任务期间抛出该异常。