Java中如何实现两个应用的线程锁定问题

发布于 2021-11-27 18:12:52 字数 204 浏览 932 评论 9

大概场景是这样的,我有两个应用,里面有一个相同的业务,比如是一个数据插入操作,为了避免出现并发业务数据混乱问题,每个应用加入了重入锁,但是现在针对于两个应用是进行的分别锁定。虽然保证每个应用的线程是独立的,即每个应用的指定方法里面只能保持一个线程的运行,但是不能保证两个应用中已经进入的线程是单独的,请问这种场景如果不做业务处理,可以用技术去实现么。从技术的角度,有没有这种类似于跨域线程的锁定,谢谢高手指点

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

甜扑 2021-12-04 01:16:21

回复
是的,我是想在后台通过hibernate的锁表机制把数据库进行行级锁,然后在save的时候对当前行进行锁定,此时其他的插入操作是不允许的,这样就可以保证插入的数据不是来自于两个应用的操作了。但是我想知道在save了以后,锁是不是就自动释放了,还是要手动在hibernate里面再去进行操作。

一人独醉 2021-12-04 01:15:01

回复
锁表不太好,假如你A和B两个应用是要往User表插入数据的,你把User锁了。那还有个C模块是要更新User表中的记录的。那它就会无法更新。所以,针对你的业务进行锁。也就是建个字段,模拟真实锁的操作就行。

小瓶盖 2021-12-04 01:13:20

回复
两条数据同时获取数据库中唯一字段的信息,然后去分别进行+1操作,但是有一种可能也会出现,就是双方同时拿到了相同的信息,这样的话,只能异常处理其中一个,因为字段要设置成Unique的,所以其中有一条数据会插入失败,虽然这种可能性很小,大概是这种思路吧 。

执手闯天涯 2021-12-04 01:11:38

回复
实际上我们业务上的需求,并不会出现两个业务同时去改同一张表,而且我需要改动的只是单条记录,需要用行级锁就可以了,只是这样会不会有造成死锁的可能性

坐在坟头思考人生 2021-12-04 01:03:06

回复
在数据库中做锁一旦控制不好就锁表了,整个业务就无法用了。如果你想用行级锁,你可以试试。我没用过。

风透绣罗衣 2021-12-03 18:20:40

引用来自“天王盖地虎”的评论

一个相同的业务在不同的应用中存在,为避免并发造成的数据混乱。可以在共享区域做锁,当然每个应用中也需要有锁的机制。如果在内存中控制的话,两个应用要是在不同的机器上还是有可能会出现问题。所以,还是在数据库中做锁吧。

居里长安 2021-12-03 17:36:06

数据库锁

够钟 2021-12-02 17:35:55

锁定标识放到同一个缓存数据库里面(例如redis)。锁定和解锁都update同一个标识

瀞厅☆埖开 2021-12-01 21:45:58

一个相同的业务在不同的应用中存在,为避免并发造成的数据混乱。可以在共享区域做锁,当然每个应用中也需要有锁的机制。如果在内存中控制的话,两个应用要是在不同的机器上还是有可能会出现问题。所以,还是在数据库中做锁吧。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文