首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java EE应用程序中的锁定

Java EE应用程序中的锁定
EN

Stack Overflow用户
提问于 2012-09-04 06:28:14
回答 1查看 158关注 0票数 1

我使用Java 6与JBOSS7和JPA2 + Hibernate。对于我的客户机,我提供了一个REST。

我关心的是如何有效地确保没有资源同时修改。应该经常发生,但万一发生,我想确保正确的处理。

到目前为止,我的方法是:

  1. Map<String, ReentrantLock>来存储锁。(我的in总是UUID的)如果地图中缺少锁,就会根据需要创建锁。在这种方法中,我喜欢并发访问将被阻塞,并且我可以控制其他线程试图锁定资源的时间。
  2. 使用JPA2乐观锁定。

你推荐哪一种?还是有更好的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-04 06:43:32

  1. 似乎很容易出错,而且可能不会扩大规模。我从来没有见过这样的设计,而且会劝阻它。
  2. 具有乐观锁定的事务是可行的选择。在这种情况下,某些事务可能会失败,您需要处理错误并重试。
  3. 带有悲观锁定的事务是另一个可行的选择。就像1),但是使用数据库来锁定和订购操作。AFAIK,JPA也支持悲观锁定。否则,您可以使用SELECT FOR UPDATE(大多数DBMS支持)来解释获取行锁。确保您找到了一个方案,锁是按照一致的顺序获得的,以避免死锁。

2-3之间的选择取决于用例,例如,是否预期争用会很高,或者是否容易重试失败的事务。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12257888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档