1

比较这个 Java EE 企业 javabean:

@Singleton
@ConcurrencyManagement(ConcurrencyManagementType.BEAN)
public class BMC {}

..用这个bean:

@Singleton
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
@Lock(LockType.READ)
public class CMC {}

因为容器管理的并发是默认的,所以可以像这样重写第二个 bean:

@Singleton
@Lock(LockType.READ)
public class CMC {}

因此,这当然让我感到奇怪。有什么不同?我可以1)像在课堂上一样关闭容器管理的并发性BMC,或者我可以2)使用容器管理的并发性,但像在课堂上那样使用读锁注释CMC类。CMC只要我不在类声明的某处放置写锁,该类就有效地关闭了他的容器管理的并发控制。

有人可以说我演示的两个构造之间存在技术差异吗?是否有任何论据为什么一种构造比另一种更好或更受青睐?

4

1 回答 1

3

根据LockType.WRITE javadoc Using LockType.READ 确实创建了一个锁。此锁允许执行具有 READ 锁的其他方法,但会阻止任何具有 WRITE 锁的方法运行,直到 READ 锁被释放。

肯定会有一些与创建 READ 锁相关的开销(可能很小且不明显),除非使用容器管理的并发,否则您不会遇到这些开销。

对于不同的人或不同的情况或不同的优先事项,哪个更好可能有不同的答案。

于 2013-04-15T23:49:47.123 回答