乐观锁是一种思想,本身代码里并没有lock或synchronized关键字进行修饰。而是采用一种version。

即先从数据库中查询一条记录得到version值,在更新这条记录时在where条件中对这个version进行判断是否发生了变化。

若version值不变则更新这条数据。若前后两个version值不等则不更新,继续下一次循环。这样就确保了在同一时间只有一个线程来修改这个值

如下只要updateCount=0则继续循环取值。

try {
//启动CAS乐观锁
do {
BmRiderInterestingNews news = bmRiderInterestingNewsDao.getInterestingNewsByNewsId(interestingNewsId);
if (news == null) {
return -2;//对象为空
} /*
进行审核结果校验:
INIT(0), //疑似,机器不通过
MACHINE_PASS(1), //机器通过
MANUAL_PASS(2), //人工通过
MANUAL_DELETE(3), //人工删除
备注:如果是机器通过,返回的是“人工通过”,如果是“疑似”,会进入审核后台进行人工审核。
*/
int auditStatus = 0;//1审核通过 2审核不通过 //审核通过
if (verifyStatus == 1 || verifyStatus == 2) {
auditStatus = 1;
}
//审核不通过
if (verifyStatus == 3) {
auditStatus = 2;
} if (verifyStatus == 0) {
return 0;//疑似通过需要进一步等待
}
if (auditStatus == 0) {
return 1;//数据错误
} // 文字审核
if (type == 0) {
//文字审核驳回
if (auditStatus == 2) {
updateCount = bmRiderInterestingNewsDao.updateTextAudit(interestingNewsId, 2, auditStatus, news.getVersion(), 0);
}
//文字审核通过
else {
//图片审核通过
if (news.getImage_audit_status() == 1) {
updateCount = bmRiderInterestingNewsDao.updateTextAudit(interestingNewsId, 1, auditStatus, news.getVersion(), DateUtil.unixTime());
}
//图片待审核
else if (news.getImage_audit_status() == 0) {
updateCount = bmRiderInterestingNewsDao.updateTextAudit(interestingNewsId, 0, auditStatus, news.getVersion(), 0);
}
//图片驳回
else {
updateCount = bmRiderInterestingNewsDao.updateTextAudit(interestingNewsId, 2, auditStatus, news.getVersion(), 0);
}
}
}
//图片审核
else {
//图片审核被驳回
if (auditStatus == 2) {
updateCount = bmRiderInterestingNewsDao.updateImageAudit(interestingNewsId, 2, auditStatus, news.getVersion(), 0);
}
//图片审核通过
else {
//文字审核通过
if (news.getText_audit_status() == 1) {
updateCount = bmRiderInterestingNewsDao.updateImageAudit(interestingNewsId, 1, auditStatus, news.getVersion(), DateUtil.unixTime());
}
//文字待审核
else if (news.getText_audit_status() == 0) {
updateCount = bmRiderInterestingNewsDao.updateImageAudit(interestingNewsId, 0, auditStatus, news.getVersion(), 0);
}
//图片驳回
else {
updateCount = bmRiderInterestingNewsDao.updateImageAudit(interestingNewsId, 2, auditStatus, news.getVersion(), 0);
}
}
}
} while (updateCount == 0);
}catch (Exception e){
logger.error("#BmRiderInterestingNewsService.updateInterestingNewsAuditStatus 趣闻自动审核更新状态失败 id({}) verifyStatus({}) type({})",interestingNewsId,verifyStatus,type,e);
return 1;
}

最新文章

  1. Shell下突破安全狗远程桌面守护
  2. Lua游戏时区问题
  3. iOS 封装添加按钮的方法
  4. ios9-通讯录
  5. Verilog之电平检测
  6. 洛谷P1508 Likecloud-吃、吃、吃
  7. sql获取exec('')的返回值
  8. IIS注册.net框架及temp文件权限开放
  9. js-ajax实现获取xmlHttp对象
  10. asp.net mvc 上传图片流存服务器
  11. Latex命令笔记
  12. 1T文件夹 - 微云
  13. A股市场暴跌背后的三大元凶?
  14. C++编程命名规范
  15. ios根据文本自适应 然后 搭建类似如下效果
  16. HIT Winter Day ACM入门
  17. Java基础之数据类型和转换
  18. IOS中的UIScrollView
  19. jquery.validata.js 插件
  20. springcloud之服务注册与发现(Eureka)

热门文章

  1. Android安装过程出现问题
  2. 11.深入理解读写锁ReentrantReadWriteLock
  3. ngnix配置自解
  4. bzoj2929
  5. Linux之sshd服务
  6. Windows 64位系统下安装JAVA环境
  7. 《Unity 3D游戏客户端基础框架》消息系统
  8. [置顶] flume高并发优化——(14)解决空行停止收集数据问题,及offsets变小问题
  9. 基于EasyDSS流媒体服务器实现的直播流管理与鉴权的后台方案
  10. RMI垃圾收集简介