package futureCallable;
import java.util.concurrent.Callable;
public class RealData implements Callable<String> {
private String para;
public RealData(String para) {
this.para = para;
}
@Override
public String call() throws Exception {
StringBuffer sb = new StringBuffer();
// 在这里是真实的业务逻辑
for (int i = 0; i < 10; i++) {
sb.append(para + i);
System.out.println(para+"处理中");
try {
Thread.sleep(100);
} catch (Exception e) {
}
}
return sb.toString();
}
}
package futureCallable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
public class Main {
public static void main(String[] args) {
RealData realData = new RealData("a");
// 构造FutureTask
FutureTask<String> future = new FutureTask<String>(realData);
RealData realData2 = new RealData("b");
// 构造FutureTask
FutureTask<String> future2 = new FutureTask<String>(realData);
ExecutorService executor = Executors.newFixedThreadPool(2);
// 开启线程进行RealData的call()的执行
executor.submit(future);
executor.submit(future2);
System.out.println("请求完毕");
try {
// 这里可以用一个sleep代替对其他业务逻辑的处理
// 在处理这些业务逻辑过程中,RealData被创建,从而充分利用了等待时间
for (int i = 0; i < 20; i++) {
Thread.sleep(100);
System.out.println("处理其他数据中" + i);
}
//获取返回值,如果此时call没执行完成,则依然会等待。
System.out.println(future.get());
System.out.println(future2.get());
} catch (Exception e) {
}
}
}