java多模块并发问题解决

问题描述

现在程序有A和B两个表,要求两个表不能同时存在。例如新增A表程序先判断B表是否存在数据,如果B表无数据时新增A表。但是这样存在并发问题,当A表通过判断后执行新增前B表同时也执行了新增,最终就会导致A表和B表同时存在数据。

尝试使用同步锁解除此问题,但AB两个表操作分别放在不同的Class类中。

求一个有效的解决方案。多谢!!!

阅读 2.8k
4 个回答

解决并发问题一般这几种思路:

  • 加锁。
  • 并行转串行。
  • CAS

在两个不同的 Class 文件是啥意思?如果是一个进程那就用 synchronized 或者是 Lock 搞定。

不同的进程就得用分布式锁了。

第二种方案可以将操作请求发到 MQ 中,转换为串行执行。

这里 CAS 不太适合。

尝试使用同步锁解除此问题,但AB两个表操作分别放在不同的Class文件中。

不在同一个class为什么不能加锁?

最好用数据库乐观锁解决以上问题。

在所有相关操作上使用同一个锁同步不就行了?

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