处理并发Java级别与数据库/ JPA级别

时间:2018-08-04 15:02:55

标签: multithreading jpa-2.0 java.util.concurrent optimistic-locking optimistic-concurrency

方案:在任何类型的在线预订应用程序中,人们都有可能同时访问该应用程序。 因此,该特定应用程序可能存在并发问题。

问题

在这种情况下,如果一个或多个人一次访问该应用程序,则存在并发问题。

要解决并发问题,我们有两种解决方案

1)客户端级别的Java并发

2)持久性级别的JPA乐观或悲观锁定

如果数据库包含1000万或更多的记录,那么哪一个是最佳解决方案?

2 个答案:

答案 0 :(得分:1)

性能问题和并发问题是总共两个不同的问题领域。最好不要将两者混在一起。

关于并发问题: Java并发或多线程在在线预订系统中的用途可能非常有限。为避免出现lost updates问题,必须使用JPA乐观锁定(最好)或悲观锁定。那是因为如果您的应用程序的多个实例并行(或多个线程)运行,那么使用JVM级线程安全技术就无法避免丢失更新。

您可以参考以下教程:

  1. JPA Optimistic Locking - Oracle Blog
  2. The Java EE 6 Tutorial

答案 1 :(得分:0)

这完全取决于应用程序。如果数据模型不复杂也不庞大,那么JPA Optimistic Locking是一种最佳解决方案。

Java和数据库并发都有各自的优缺点。

数据库级别:

优势:

1)它更易于实现和维护。

缺点:

1)如果数据库包含庞大而复杂的数据,则可能导致死锁和超时。


Java级别:

优势:

1)更好地利用资源

缺点:

1)调试和测试非常复杂。

2)可能发生死锁。

3)难以在Java编程中实现。

4)与不良设计有关的风险因素。(饥饿)

5)它不能从一种环境移植到另一种环境

ref:java Concurrency vs JPA concurrency

ref:database vs user level