java - Prevayler 的同步策略是什么?

标签 java concurrency synchronization persistence prevayler

Prevayler 保证所有写入(通过其事务)都是同步的。但是阅读呢?

如果不使用显式同步(在用户代码中),脏读是可能的吗?

如果业务对象被解读为:

// get the 3rd account
Accont account = (Bank)prevayler.prevalentSystem().getAccounts().get(2);

?

如果是这样,什么同步策略对用户代码有益?

(假设业务对象 A 包含业务对象 B 的集合),

  • 使用同步集合(A 中的 Bs),例如 来自 java.util.concurrent 包?
  • 将集合读取外部事务与 集合写入事务内部,例如使用 围绕读取和写入的“同步(集合)”代码?

最佳答案

推荐的方法是使用 JMatch Query 和 Prevayler.execute(Query)。直接或使用子类化。

返回的结果必须是原始值或不可变对象(immutable对象)。如果您计划返回可变对象,您应该子类化 JMatch Query 来执行这些深拷贝。通过这种方式,您可以获得一个系统,该系统将每个合理的读取与其他(合理的)读取和写入锁定在一起。这可以加快和简化开发,尤其是对于没有多线程编程经验的开发人员。

如果您需要在高并发负载下获得更高的性能(这应该是一种罕见的情况),您确实可以使用上述细粒度锁定 - 使用“同步”和 java.util.concurrent。

参见 this discussion了解更多详情。

关于java - Prevayler 的同步策略是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/454294/

相关文章:

synchronization - boost::filesystem::copy 之后需要 fflush 或同步吗?

java - 如何在某些源上创建并发迭代器?

java - 在 Tomcat 7 中部署的 war 在 Linux 上的行为与在 Windows 上的行为不同

java - 枚举映射和流

Java并发和循环任务执行

Haskell 并发 IO 行为

multithreading - 对于从作业队列中拉出运行的工作人员,我应该使用什么隔离级别?

java - 使用 XSSFWorkbook 和 AbstractExcelView

java - Android 2.2 上的 Admob 6 无法正常工作

linux - 为什么在 Linux 中 spin_lock 和 spin_unlock 之间的中断被禁用?