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("外卖员车子被偷,商家厨师请假了 。。。 "); } }