java异步调用方法
/**
* 单独开启一个线程,运行一个程序,不影响其他程序处理,其他程序无需等待该方法执行结束
*
* @param params
* @return
*/
public void changeSendFlagWaitSecond(Long originalMsgId) throws InterruptedException {
// 两个线程的线程池
ExecutorService executor = Executors.newFixedThreadPool(2);
// jdk1.8之前的实现方式
CompletableFuture<String> future = CompletableFuture.supplyAsync(new Supplier<String>() {
@Override
public String get() {
System.out.println("开始执行任务!");
try {
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS").format(new Date()) + "========>开始等待5秒!!!" + originalMsgId );
// 停5秒
Thread.sleep(30000);
// 查询消息发送状态是否仍为发送中,
String sendSuccessFlag = dao.selectSendSuccessFlagById(originalMsgId);
System.out.println("sendSuccessFlag:"+sendSuccessFlag);
// 若5秒后仍为发送中,则改为发送失败
if(StringUtil.isNotBlank(sendSuccessFlag) && TelProConstant.SIX1.equals(sendSuccessFlag)){
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS").format(new Date()) + "========>5秒后更改为发送失败!!!" + originalMsgId );
updateSendSuccessFlag1(originalMsgId,TelProConstant.ZERO1);
}
} catch (Exception e) {
e.printStackTrace();
}
return "耗时任务结束完毕!";
}
}, executor);
//采用lambada的实现方式
future.thenAccept(e -> System.out.println(e + " ok"));
}