java事务和锁的问题,如果事务没提交,其他线程能修改数据库中的同条数据吗

在整个类上边加上注解事务控制,里面的主方法加上了synchronize锁,结果测试并发两个线程时,同一条数据第一个线程跑完主方法后数据库值并未修改(主方法里有update... 在整个类上边加上注解事务控制,里面的主方法加上了synchronize锁,结果测试并发两个线程时,同一条数据第一个线程跑完主方法后数据库值并未修改(主方法里有update语句,执行完主方法应该是数值减一的),第二个线程进来后读到的数据是没减一的(目测第一个线程事务没提交),说的有点乱,其实我就是想问,如果一个写方法加事务了,他在去数据库修改一个数据时,那么这条数据会被另一个线程同时修改吗?如果不会的话岂不是事务就能实现控制并发了?(- - 汗,一直理解的很混乱),还有事务该怎么理解?他是一个线程的一部分? 展开
 我来答
百度网友f77eb01
2014-12-26 · TA获得超过407个赞
知道小有建树答主
回答量:615
采纳率:100%
帮助的人:414万
展开全部
题主,你说的这种情况是允许出现的。这与事务的隔离程度有关。

如果事务隔离程度设置得当,就没有必要显式的通过synchronized保护资源(除非资源是某个service中的公共属性)。
百度网友7950f78
2014-12-26
知道答主
回答量:4
采纳率:0%
帮助的人:3475
展开全部
看情况,一般多线程的话,最好加上同步锁,不然得到的就是脏数据了。经过多次修改的数据,
加了同步之后,程序会先运行一条线程,走完之后提交。事务其实就是为了保证数据的一致性。比如你多个线程一起修改同一条数据,一个方法成功了,另一个失败了。那么,结果就是修改失败,
要成功一起成功才行。
追问
你的意思 是(没加锁前提,AB并发) A事务没提交时B事务可以拿着脏数据(或过期数据)先去提交呗?然后A再提交,整个过程无异常 但是两次更新后更新的都是脏数据?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式