锁、事务和同步

本文探讨并发环境下读写冲突问题及其解决方案,包括使用synchronized、乐观锁和悲观锁,以及如何借助数据库锁和事务来确保数据一致性。在分布式场景下,乐观锁通过版本控制字段保证数据同步,而悲观锁则通过实际锁定数据防止冲突。
摘要由CSDN通过智能技术生成

关于乐观锁、悲观锁、事务、synchronized,网上介绍的文章很多。但是,在实际使用中,我们经常要遇到需要组合使用这几种技术的场景。而这方面的文章却非常少,本文将着重介绍各种组合使用情况下的行为和问题。

并发下读写冲突的问题

在开发中我们经常会遇到需要对某个字段做自增操作,比如说你向银行存入一笔100元的,那么你的总金额就要增加100元。那么程序中就会使用如下代码

@Entity
@Table(name="test")
public class Test extends BaseModel{
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    @Column(name = "id",unique = true, nullable = false)
    private Long id;

    private Integer count;

    public Test() {
    }

    public Integer getCount() {
        return count;
    }

    public void setCount(Integer count) {
        this.count = count;
    }
}
@Transactionalpublic interface TestRepository extends BaseRepository<Test, Long> { 
}   
@RestController
@RequestMapping(value = "/test", produces = "application/json")
public class TestController {
    @Autowired
    private TestRepository repository;

    public Test updateMoney() {
            Test test = repository.findOne(1L);
            test.setMoney(test.getMoney() + 1);
            repository.save(test);
            return test;
    }
}

这段代码并没有什么问题,事实上在大部分情况下也能正常工作。但是如果遇到高并发情况&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值