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

smh821025 发布于 2016/08/28 16:18
阅读 285
收藏 0
大概场景是这样的,我有两个应用,里面有一个相同的业务,比如是一个数据插入操作,为了避免出现并发业务数据混乱问题,每个应用加入了重入锁,但是现在针对于两个应用是进行的分别锁定。虽然保证每个应用的线程是独立的,即每个应用的指定方法里面只能保持一个线程的运行,但是不能保证两个应用中已经进入的线程是单独的,请问这种场景如果不做业务处理,可以用技术去实现么。从技术的角度,有没有这种类似于跨域线程的锁定,谢谢高手指点
加载中
0
天王盖地虎
天王盖地虎
一个相同的业务在不同的应用中存在,为避免并发造成的数据混乱。可以在共享区域做锁,当然每个应用中也需要有锁的机制。如果在内存中控制的话,两个应用要是在不同的机器上还是有可能会出现问题。所以,还是在数据库中做锁吧。
0
Fatboy123
Fatboy123
锁定标识放到同一个缓存数据库里面(例如redis)。锁定和解锁都update同一个标识
0
若水191
若水191
数据库锁
0
smh821025
smh821025

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

一个相同的业务在不同的应用中存在,为避免并发造成的数据混乱。可以在共享区域做锁,当然每个应用中也需要有锁的机制。如果在内存中控制的话,两个应用要是在不同的机器上还是有可能会出现问题。所以,还是在数据库中做锁吧。
请问如何在共享区域做锁,请帮忙指点些线索。另外在保存的时候,需要对Entity的每个属性进行赋值,赋值的期间如何保证数据不被另外一个应用的线程所破坏,谢谢指点。
天王盖地虎
天王盖地虎
回复 @smh821025 : 在数据库中做锁一旦控制不好就锁表了,整个业务就无法用了。如果你想用行级锁,你可以试试。我没用过。
smh821025
smh821025
回复 @天王盖地虎 : 实际上我们业务上的需求,并不会出现两个业务同时去改同一张表,而且我需要改动的只是单条记录,需要用行级锁就可以了,只是这样会不会有造成死锁的可能性
smh821025
smh821025
回复 @天王盖地虎 : 两条数据同时获取数据库中唯一字段的信息,然后去分别进行+1操作,但是有一种可能也会出现,就是双方同时拿到了相同的信息,这样的话,只能异常处理其中一个,因为字段要设置成Unique的,所以其中有一条数据会插入失败,虽然这种可能性很小,大概是这种思路吧 。
天王盖地虎
天王盖地虎
回复 @smh821025 : 锁表不太好,假如你A和B两个应用是要往User表插入数据的,你把User锁了。那还有个C模块是要更新User表中的记录的。那它就会无法更新。所以,针对你的业务进行锁。也就是建个字段,模拟真实锁的操作就行。
smh821025
smh821025
回复 @天王盖地虎 : 是的,我是想在后台通过hibernate的锁表机制把数据库进行行级锁,然后在save的时候对当前行进行锁定,此时其他的插入操作是不允许的,这样就可以保证插入的数据不是来自于两个应用的操作了。但是我想知道在save了以后,锁是不是就自动释放了,还是要手动在hibernate里面再去进行操作。
下一页
返回顶部
顶部