JDK中的Future模式
RealDataJDK类:
public class RealDataJDK implements Callable<String> {
protected String data;
public RealDataJDK(String data) {
this.data = data;
}
@Override
public String call() throws Exception {
//利用sleep方法来表示真是业务是非常缓慢的
try {
System.out.println("kaishi 耗时处理");
Thread.sleep(1000);
System.out.println("kaishi 耗时处理完成");
} catch (InterruptedException e) {
e.printStackTrace();
}
return data;
}
}
Application
public class Application {
public static void main(String[] args) throws Exception {
FutureTask<String> futureTask =
new FutureTask<String>(new RealDataJDK("name"));
ExecutorService executor =
Executors.newFixedThreadPool(1); //使用线程池
//执行FutureTask,相当于上例中的client.request("name")发送请求
executor.submit(futureTask);
//这里可以用一个sleep代替对其他业务逻辑的处理
//在处理这些业务逻辑过程中,RealData也正在创建,从而充分了利用等待时间
System.out.println("处理自己的事情");
Thread.sleep(500);
System.out.println("处理自己的事情完成");
//使用真实数据
//如果call()没有执行完成依然会等待
System.out.println("数据=" + futureTask.get());
executor.shutdown();
}
}
浙公网安备 33010602011771号