java的Callable接口

来源:互联网 发布:雕刻机作图软件 编辑:程序博客网 时间:2024/05/16 09:10

java也算是原生的支持多线程吧,但是如何让线程执行完成之后能够有返回值返回到主线程呢。。。?

一般情况下线程是实现runable接口,但是如果想要返回值的话那么就应该实现Callable接口了。。。

好了,还是不多说废话,直接上一个简单的例子就好了。。。

package fjs;import java.util.ArrayList;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.Future;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class Main {class TaskWithResult implements Callable<String> {@Overridepublic String call() throws Exception {// TODO Auto-generated method stubreturn "aaaa";}}public TaskWithResult TaskWithResult() {return new TaskWithResult();}public static void main(String args[]) throws InterruptedException, ExecutionException {Main main = new Main();ExecutorService exec = Executors.newCachedThreadPool();ArrayList<Future<String>> results = new ArrayList<Future<String>>();   //最后的返回值就将会保存在Futuer变量中for (int i = 0; i < 10; i++) {results.add(exec.submit(main.TaskWithResult()));  //用submit来提交task}for (Future<String> f : results) {System.out.println(f.get());   //如果线程还没有执行完成的话,那么get方法将会阻塞,直到有返回值}}}