public class TasksWithResult implements Callable<String> {
private int id;
public TasksWithResult(int id){
this.id=id;
}
//返回结果数据
@Override
public String call() throws Exception {
return "result:"+id;
}
public static void main(String[] args) {
ExecutorService exec=Executors.newCachedThreadPool();
List<Future<String>>results=new ArrayList<Future<String>>();
for (int i = 0; i < 10; i++) {
//使用exec.submit方法调用
results.add(exec.submit(new TasksWithResult(i)));
}
for (Future<String> future : results) {
try {
//检查任务是否已经完成
if (future.isDone()) {
//调用get方法时,如果结果没有就绪,当前线程会阻塞,直至结果就绪
System.out.println(future.get());
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
}
//callable示例:从每个任务中返回线程的睡眠时间
public class SleepTask implements Callable<String> {
String name;
public SleepTask(String name){
this.name=name;
}
@Override
public String call(){
Random random=new Random();
int time=random.nextInt(100);
try {
TimeUnit.MILLISECONDS.sleep(time);
} catch (InterruptedException e) {
e.printStackTrace();
}
return name+":"+time;
}
public static void main(String[] args) {
ExecutorService exec=Executors.newCachedThreadPool();
List<Future<String>>futures=new ArrayList<Future<String>>();
for (int i = 0; i < 10; i++) {
futures.add(exec.submit(new SleepTask("thread-"+(++i))));
}
for (Future<String> future : futures) {
try {
System.out.println(future.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}
}