㊣java编程核心第2版多线程的图书
75.5元
包邮
(需用券)
去购买 >
1. 应用场景
由于Runnable接口中的run()方法无返回值,当我们需要执行的任务需要返回一个对象的话,Runnable接口虽然可以用过定义实例变量来完成同样的效果,但并非是最佳的选择。此时,应该定义实现了Callable接口的类,借助于Java的线程池来达到我们的目的。需要注意的是,这里只能调用ExecutorService对象的submit(Callable callable)方法,该方法将返回一个Future对象,通过调用该对象的get()方法拿到我们需要的返回值。
/**
* IntegerSquare类用于计算并返回输入的整数的平方
*/
public class IntegerSquare implements Callable {
private int num; //进行平方运算的数
public IntegerSqure (int num) {
this.num = num;
}
@Override
public Integer call() throws Exception {
return num * num; //返回num的平方
}
}
/**
* 使用CachedThreadPool进行测试
*/
public class IntegerSqureDemo {
public static void main (String[] args) {
ExecutorService threadPool = Executors.newCachedThreadPool();
List> resultList = new ArrayList<>();
for (int i = 0; i < 100; ++i) {
Future result = threadPool.submit(new IntegerSquare(i)); //submit方法返回Future对象
resultList.add(result);
}
for (Future res