很多情况下,子类继承了Runnable和Thread,只能保证这个线程执行,而不能获取线程执行的结果,为了获取线程的执行结果,我们可以让子类继承于Callable,这样就可以获取执行的结果
package test;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
class Item implements Callable<Integer> {
private int first;
private int second;
public Item(int first, int second) {
this.first = first;
this.second = second;
}
@Override
public Integer call() throws Exception {
return this.first * this.second;
}
}
public class CallBackThread {
public static void main(String[] args) throws InterruptedException, ExecutionException {
//創建了大小為8的線程池
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(8);
List<FutureTask<Integer>> futureTasks = new ArrayList<FutureTask<Integer>>();
for (int i = 0; i < 100; i++) {
FutureTask<Integer> futureTask = new FutureTask<Integer>(new Item(i, (i + 1) * (i - 1)));
futureTasks.add(futureTask);
fixedThreadPool.submit(futureTask);
}
for (FutureTask<Integer> task : futureTasks) {
System.out.println(task.get());
}
}
}