可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口。
执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了。
package thread.callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
/**
* Callable和Future
* <p>
* 1.可返回值的任务必须[实现Callable接口],类似的,无返回值的任务必须[Runnable接口]
* 2.执行Callable任务后,可以获取一个[Future的对象],在该对象上调用get就可以获取到Callable任务返回的Object了。
* <p>
* Created by heqianqian on 2017/4/15.
*/
public class CallableDemo {
public static void main(String[] args) throws ExecutionException, InterruptedException {
ExecutorService pool = Executors.newFixedThreadPool(2);
Future future1 = pool.submit(new MyCallable("A"));
Future future2 = pool.submit(new MyCallable("B"));
System.out.println(future1.get().toString());
System.out.println(future2.get().toString());
pool.shutdown();
}
}
package thread.callable;
import java.util.concurrent.Callable;
/**
* MyCallable
* Created by heqianqian on 2017/4/15.
*/
public class MyCallable implements Callable {
private String name;
public MyCallable(String name) {
this.name = name;
}
@Override
public Object call() throws Exception {
return name + "返回的内容";
}
}