https://www.cnblogs.com/qq931399960/p/15555152.html中的实现,无论是join还是futuretask都会阻塞主线程,影响效率

JDK8出现了一个新的类CompletableFuture,可以很容易的实现异步回调,使用该类实现订餐外卖

    private static Logger logger = LoggerFactory.getLogger(OrderMealPlatformJDK8.class);

    static Boolean merchantFinish = null;
    static Boolean courierFinish = null;

    public static void main(String[] args) {
        try {
            CompletableFuture.runAsync(() -> {
                try {
                    logger.info("起锅烧油");
                    logger.info("炒菜");
                    // 5s炒菜时间
                    Thread.sleep(5000);
                    logger.info("盛饭");
                    logger.info("打包");
                    merchantFinish = true;
                } catch (Exception e) {
                    logger.error("", e);
                }
                if (courierFinish != null) {
                    sendMeal(merchantFinish, courierFinish);
                }
            });

            CompletableFuture.runAsync(() -> {
                try {
                    logger.info("抢单");
                    logger.info("规划路线");
                    // 3s赶路时间
                    Thread.sleep(3000);
                    logger.info("赶路");
                    logger.info("到店");
                    courierFinish = true;
                } catch (Exception e) {
                    logger.error("", e);
                }
                if (merchantFinish != null) {
                    sendMeal(merchantFinish, courierFinish);
                }
            });
        } catch (Exception e) {
            logger.error("", e);
        }

        logger.info("继续发布订单消息");
    }

    private static void sendMeal(boolean merchantResult, boolean courierResult) {
        if (merchantResult && courierResult) {
            logger.info("快递员开始送餐 。。。");
        } else if (merchantResult && !courierResult) {
            logger.error("外卖员车子被偷了,不能够送餐");
        } else if (!merchantResult && courierResult) {
            logger.error("商家厨师家里临时有事,请假了,做不了饭");
        } else {
            logger.error("外卖员车子被偷,商家厨师请假了 。。。 ");
        }
    }
View Code

相关文章: