根据业务场景选择合适的手段处理并发?

很多人没有控制并发的意识,即使意识到了,也不知道如何根据业务场景采取合适的手段控制并发,是使用JPA中的乐观锁,还是使用数据库的行级自旋锁完成简单并发控制,还是for update悲观锁,还是基于redis或zookeeper一类的分布式锁?
比如我就是意思到了,但是知道如和处理并发的这类人,来位大佬指点一二。


例如:余额的操作。

public void reduce(String accountId,BigDecimal cost){
    Account account = accountService.findOne(accountId);
    BigDecimal balance = account.getBalance();
    if(balance > cost)
      balance = balance - cost;//用四则运算代替BigDecimal的api,方便表达
    account.setBalance(balance);
    accountService.save(account);
}
阅读 2.8k
2 个回答

阿里巴巴的Java开发手册,推荐用乐观锁,除非极高的并发导致重试率高于20%。

乐观锁的话,好像用JPA不太好实现哦,还是老老实实写SQL语句吧。

新手上路,请多包涵

推荐使用乐观锁,JPA很好实现,@Version

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题