Future

作者: writeanewworld | 来源:发表于2018-11-06 17:37 被阅读0次

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 {

}
}

相关文章

网友评论

      本文标题:Future

      本文链接:https://www.haomeiwen.com/subject/djouxqtx.html