子线程指令重排

CountDownLatch countDownLatch = new CountDownLatch(1);

try{
boolean anotherDay = checkAnotherDay();
try{
if(anotherDay) {
String logUrlYestoday = logUrl;
int index = logUrlYestoday.lastIndexOf(".");
StringBuilder stringBuilder = new StringBuilder(100);
stringBuilder.append(logUrlYestoday.substring(0, index+1)).append(dateIbFormate.format(lastTime)).append(".log");

int res = readLogFile(stringBuilder.toString(), false);
if(res == 0) {
logger.info("read yesterday success");
} else {
logger.error("read yesterday error, {}", res);
}
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
} finally {
countDownLatch.countDown();
}

countDownLatch.await();

readLogFile(logUrl, true);

} catch (Exception e) {
logger.error(e.getMessage(), e);
}

  

在未使用CountDownLatch前,有出现最后一行

readLogFile

 

的数据先于前面的代码数据执行插入操作了,故为了确保数据有序性,加入CountDownLatch

 

性质有点像:https://www.cnblogs.com/silyvin/p/9106641.html


posted on 2018-08-09 11:50  silyvin  阅读(167)  评论(0编辑  收藏  举报