java事务和锁的问题,如果事务没提交,其他线程能修改数据库中的同条数据吗
在整个类上边加上注解事务控制,里面的主方法加上了synchronize锁,结果测试并发两个线程时,同一条数据第一个线程跑完主方法后数据库值并未修改(主方法里有update...
在整个类上边加上注解事务控制,里面的主方法加上了synchronize锁,结果测试并发两个线程时,同一条数据第一个线程跑完主方法后数据库值并未修改(主方法里有update语句,执行完主方法应该是数值减一的),第二个线程进来后读到的数据是没减一的(目测第一个线程事务没提交),说的有点乱,其实我就是想问,如果一个写方法加事务了,他在去数据库修改一个数据时,那么这条数据会被另一个线程同时修改吗?如果不会的话岂不是事务就能实现控制并发了?(- - 汗,一直理解的很混乱),还有事务该怎么理解?他是一个线程的一部分?
展开
2个回答
展开全部
看情况,一般多线程的话,最好加上同步锁,不然得到的就是脏数据了。经过多次修改的数据,
加了同步之后,程序会先运行一条线程,走完之后提交。事务其实就是为了保证数据的一致性。比如你多个线程一起修改同一条数据,一个方法成功了,另一个失败了。那么,结果就是修改失败,
要成功一起成功才行。
加了同步之后,程序会先运行一条线程,走完之后提交。事务其实就是为了保证数据的一致性。比如你多个线程一起修改同一条数据,一个方法成功了,另一个失败了。那么,结果就是修改失败,
要成功一起成功才行。
追问
你的意思 是(没加锁前提,AB并发) A事务没提交时B事务可以拿着脏数据(或过期数据)先去提交呗?然后A再提交,整个过程无异常 但是两次更新后更新的都是脏数据?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询