我有一个可赎回,我使用调用
FutureTask<Integer> task = new FutureTask<Integer>(new MyCallable(name, type));
pool = Executors.newSingleThreadExecutor();
pool.submit(task);
我想知道的是执行后继续pool.submit(task)
或将等待调用完成执行?
总之我只是想知道有没有其他任何方法一样thread.join()
可赎回?
我有一个可赎回,我使用调用
FutureTask<Integer> task = new FutureTask<Integer>(new MyCallable(name, type));
pool = Executors.newSingleThreadExecutor();
pool.submit(task);
我想知道的是执行后继续pool.submit(task)
或将等待调用完成执行?
总之我只是想知道有没有其他任何方法一样thread.join()
可赎回?
...有没有喜欢的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
的。
task.get()
任务作为一个FutureTask
)预期当前线程等待由线程池进程完成托管任务的。
这种方法最终返回无论是具体结果或抛出同样的检查例外(虽然裹成为ExecutionException)作业线程将其任务期间抛出。