1.future应用场景实际操作
- future 初步认识 场景:假如你要做饭,啥也没有。就得先买厨具跟食材
- 实现分析:网上买个厨具,然后快递过来了,这期间你可以去买菜。所以可以在主线程(超市买菜)里面另起一个子线程去网购厨具 主线程与子线程异步执行
- 等厨具来需要五分钟,买菜需要两分钟。所以让主线程去买菜,子线程去等厨具,主线程干完事就等着子线程。总之就是时间长那个交给异步future去做,时间短那个可以放主线程中执行
- @author waw
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
public class SimpleTest {
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
// 第一步 网购厨具
Callable<Chuju> onlineShopping = new Callable<Chuju>() {
public Chuju call() throws Exception {
System.out.println("下单 等待送货...");
Thread.sleep(5000);// 模拟送货时间
System.out.println("签收 厨具送到...");
return new Chuju();
}
};
FutureTask<Chuju> task = new FutureTask<Chuju>(onlineShopping);
new Thread(task).start();
try {
// 第二步 去超时购买食材
Thread.sleep(2000);// 模拟购买食材时间
Shicai shicai = new Shicai();
System.out.println("食材到位...");
// 第三步 用网购来的厨具烹饪食材
if (!task.isDone()) {
System.out.println("厨具还没到...");
}
Chuju chuju = task.get();
System.out.println("收到厨具 开始做饭...");
cook(chuju,shicai);
System.out.println("总共用时:" + (System.currentTimeMillis() - startTime));
} catch (Exception e) {
e.printStackTrace();
}
}
static void cook(Chuju chuju,Shicai shicai) {
System.out.println("做饭中...");
//do somthing
System.out.println("做饭结束...");
}
static class Chuju {
}
static class Shicai {
}
}
网友评论