创建Callable对象
注意:
Callable 是带泛型的接口
这里执行的泛型其实是 call() 方法的返回值类型
/*
* 线程求和案例:实现 1~x 之间的累加求和
*/
public class MyCallable implements Callable {
private Integer number = new Integer(0);
public MyCallable(int number) {
this.number = number;
}
@Override
public Object call() throws Exception {
int sum = 0;
for (int x = 1; x <= number; x++) {
sum += x;
}
return sum;
}
}
实现线程池的代码--方法2
/*
* A:创建一个线程池对象,控制要创建几个线程对象
* static ExecutorService newFixedThreadPool(int nThreads)
*
* B:这种线程池的线程可以执行:
* 可以执行Callable对象代表的线程
* 做一个类实现Callable接口
*
* C:调用如下方法:
* <T> Future<T> submit(Callable<T> task)
*
* D:执行完之后想结束线程,可以吗?
* 可以
*
* E:利用返回值获取执行结果
*
*/
public class ExecutorsDemo {
public static void main(String[] args) throws InterruptedException, ExecutionException {
//1.创建线程池对象
ExecutorService pool = Executors.newFixedThreadPool(2);
//2.可以执行Runnable对象或者Callable对象代表的线程
//利用Future对象接收返回值
Future<Integer> f1 = pool.submit(new MyCallable(100));
Future<Integer> f2 = pool.submit(new MyCallable(200));
//3.通过Future对象的get()方法获取结果,并输出结果
System.out.println(f1.get());
System.out.println(f2.get());
//4.运行结束后,结束线程池
pool.shutdown();
}
}
运行结果:
5050
20100