Jakarta ee ConcurrencyManagementType.BEAN和LockType.READ之间的区别?

Jakarta ee ConcurrencyManagementType.BEAN和LockType.READ之间的区别?,jakarta-ee,concurrency,singleton,Jakarta Ee,Concurrency,Singleton,比较以下Java EE enterprise javabean: @Singleton @ConcurrencyManagement(ConcurrencyManagementType.BEAN) public class BMC {} …使用此bean: @Singleton @ConcurrencyManagement(ConcurrencyManagementType.CONTAINER) @Lock(LockType.READ) public class CMC {} 因为容器管理的

比较以下Java EE enterprise 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
类实际上已经关闭了容器管理的并发控制

可以说我演示的两种结构之间存在技术差异吗?是否有任何理由说明为什么一个构造比另一个更好或更可取?

根据使用LockType.READ会创建锁。此锁允许执行具有读锁的其他方法,但会阻止任何具有写锁的方法运行,直到释放读锁为止

创建读锁肯定会有一些开销(可能很小,也不明显),除非使用容器管理的并发,否则不会遇到这种情况

哪一个更好可能对不同的人、不同的环境或不同的优先事项有不同的答案