关于乐观锁、悲观锁、事务、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;
}
}
这段代码并没有什么问题,事实上在大部分情况下也能正常工作。但是如果遇到高并发情况&#