3
回答
在并发的情况下,程序事务和数据库事务是怎么运行的?
滴滴云服务器,限时包月0.9元,为开发者而生>>>   
@Transactional  public void selectAndUpdate() {
    status = select ... for update;     if(status!="初始值") {         return;
    }
    程序逻辑 ...
    update status语句...
}

如果利用这种方式来控制并发会有什么问题?另外我还想问大家的是:多个线程的话,会不会导致当一个线程执行到程序逻辑那块的时候,资源被另一个线程 抢去的可能?导致另一个线程进入这个方法,发现状态还是没有被改变,然后又进入程序逻辑这块,导致两个线程都执行了一遍吗?数据库的一个事务没有完成的 话,会让另外一个线程的事务进入吗?

举报
Anony_mous
发帖于2年前 3回/277阅
共有3个答案 最后回答: 2年前
mysql吗?

第一个,访问量大不大,大的话,卒
第二个,数据库事务级别是哪个,我都是闭着眼睛用可重复读级别的
第三个,写入和读取是一个数据库吗,尤其是在开启读写分离的情况下,需要确认下。

--- 共有 4 条评论 ---
聽雨人回复 @Anony_mous : 事务没有结束前,数据行是被锁住的。 2年前 回复
Anony_mous回复 @聽雨人 : 多个线程的话,会不会导致当一个线程执行到程序逻辑那块的时候,资源被另一个线程抢去的可能?导致另一个线程进入这个方法,发现状态还是没有被改变,然后又进入程序逻辑这块,不会导致两个线程都执行了一遍吗? 2年前 回复
聽雨人回复 @Anony_mous :首先, 如果select for update是发往写库的话,可以锁住。其次,事务里面所有的sql查询无论读写都应该发往写库。最后,事务级别你需要了解,确保数据的一致性和完整性。 2年前 回复
Anony_mous是MySQL数据库. 1.访问量算是一般吧; 2.读写是分离的; 我见到程序里都是这样的,我觉得这样做能不能锁住都是一个问题,但是我不还有其它什么办法..... 2年前 回复
顶部