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