1.首先实现Callable接口,实现Callable接口中的call()方法(这里命名为MyCallable);
2.在main方法中声明ExecutorService类型的新变量(这里命名为pool),调用Executors类中的静态方法newSingleThreadExecutor()或newFixedThreadPool(int nThreads);来创建一个或多个线程;
3.创建MyCallable对象;
4.通过Future<T>类的对象(这里命名为f)调用pool中的submit()方法来接收线程计算结果;
5.通过f中的get()方法得到计算结果。
示例:
MyCallable.java
import java.util.concurrent.Callable;
public class MyCallable implements Callable<Integer> {
private Integer n;
public MyCallable(Integer n) {
// TODO 自动生成的构造函数存根
this.n = n;
}
@Override
public Integer call() throws Exception {
Integer sum = 0;
for(int i = 1; i <= n; i++) {
sum += i;
}
return sum;
}
}
poolDemo.java
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class poolDemo {
public static void main(String[] args) {
ExecutorService pool = Executors.newFixedThreadPool(2);
MyCallable mc1 = new MyCallable(100);
MyCallable mc2 = new MyCallable(200);
Future<Integer> f1 = pool.submit(mc1);
Future<Integer> f2 = pool.submit(mc2);
try {
System.out.println(f1.get());
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (ExecutionException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
try {
System.out.println(f2.get());
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (ExecutionException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
pool.shutdown();
}
}
输出结果:
5050
20100