展开全部
线程提交执行的时候就会被调用,就像run方法一样,只不过这里在未来可以得到call执行的结果e68a8462616964757a686964616f31333337396165import java.util.ArrayList;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
class TaskWithResult implements Callable{
private int id;
private static int count =10;
private final int time =count--;
public TaskWithResult(int id){
this.id = id;
}
@Override
public String call() throws Exception {
TimeUnit.MILLISECONDS.sleep(100);
return "Result of TaskWithResult : "+ id+", Time= "+time;
}
}
public class CallableDemo {
public static void main(String[] args) throws InterruptedException, ExecutionException {
ExecutorService exec = Executors.newCachedThreadPool();
ArrayList> results =new ArrayList>();
for(int i=0;i<10;i++){
results.add(exec.submit(new TaskWithResult(i)));
}
for(Future fs : results){
System.out.println(fs.get());
}
}
}