我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:六合特肖 > 访问控制字段 >

java处理高并发时使用synchronized代码锁防止同时对数据库某一数

归档日期:05-23       文本归类:访问控制字段      文章编辑:爱尚语录

  java处理高并发时,使用synchronized代码锁防止同时对数据库某一数据的问题。

  java处理高并发时,使用synchronized代码锁防止同时对数据库某一数据的问题。

  我现在使用synchronized(Class.某静态属性){//代码块}这种模式对Dao层操作数据库某一条数据操作进行了加锁,为了防止多个访问同时操作同一数据造成数据混乱的问题,但是发现虽然加了锁...

  我现在使用synchronized(Class.某静态属性){ //代码块 }这种模式对Dao层操作数据库某一条数据操作进行了加锁,为了防止多个访问同时操作同一数据造成数据混乱的问题,但是发现虽然加了锁还是会出现数据混乱。已验证没有其他代码逻辑问题。提问使用代码块锁是否无法完全杜绝这个问题?另外,如果hibernate中使用悲观锁是否能解决此问题,经尝试无法解决。再有,使用存储过程加入for update是否能解决此问题?经测试mysql数据库下几乎不生效,实际环境为oracle但是无法进行批量测试。请大神给出明确思路。

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部首先synchronized不可能做到对某条数据库的数据加锁。它能做到的只是对象锁。

  比如数据表table_a中coloum_b的数据是临界数据,也就是你说的要保持一致的数据。你可以定义一个类,该类中定义两个方法read()和write()(注意,所有有关该临界资源的操作都定义在这个类中),再定义一个静态变量作为锁就可以了。

  我现在的做法和您给出的第一个回答是类似的。数据库级别行锁for update 没有生效,我用的是悲观锁。不知原因……你确定对该数据的所有操作是在同一个类?在同一个类中你确定与该资源相关的方法做到了同步?注意,synchronized一定是把全局静态锁,这样才能保证该对象的多个实例同时操作也能达到同步效果

本文链接:http://shawntierney.com/fangwenkongzhiziduan/396.html