• java 乐观锁CAS


    乐观锁是一种思想,本身代码里并没有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;
            }
  • 相关阅读:
    Nginx-->基础-->理论-->001:Nginx基本介绍
    Nginx-->基础-->理论-->nginx进程模型
    Nginx-->基础-->排错-->nginx错误总结
    Nginx-->基础-->安装-->001:安装总结
    网络-->监控-->单位换算
    网络-->监控-->OID-->BGP
    在腾讯云centOs系统上安装nginx
    react-native入门学习( 一 )
    对javascript变量提升跟函数提升的理解
    chrome浏览器好用的一些插件
  • 原文地址:https://www.cnblogs.com/luo-mao/p/7804404.html
Copyright © 2020-2023  润新知