Java如何使整个方法调用链线程安全

时间:2016-07-01 16:15:09

标签: java methods web-applications thread-safety

我有一个method在数据库表中创建一行。

将另一个表的 id (让我们称之为 ID1 )作为参数,

要将 id 连接到该行,它会调用另一种方法来计算它(让我们称之为 ID2 )来自表中的行数拥有相同的月份和其他一些价值观。

然后在创建行之后

它调用另一种方法传递 ID1 ID2 作为参数,以在上述2个表之间的asociation表中创建一行。

因为这些方法是从多个应用程序(独立,Web服务,Web ...等)调用的,所以它会遭受严重的数据损坏,如下所示:

  1. 使用相同的 ID2
  2. 创建多个行
  3. 多行ID2与 ID1
  4. 的单行相关联

    使这一系列方法调用线程安全以消除上述两种不良行为的最佳方法是什么?

    修改

    代码位于jar库中,该库与每个应用程序相关联

    它在oracle adf平台上

3 个答案:

答案 0 :(得分:2)

我认为这不是线程安全问题,而是更多的数据完整性问题。 添加唯一性约束并使第一个输入方法成为事务性的。这样您就不会牺牲性能,但必须处理异常处理并向您的客户发出失败信号。

答案 1 :(得分:1)

我不认为这是一个线程问题;这对我来说听起来更像是隔离和交易管理。

链中的所有调用都需要是一个序列化的单个工作单元。在完成所有操作之前,没有其他线程能够看到数据库更改。

您需要一个事务管理器和一个设置为SERIALIZABLE隔离级别的数据库连接。

Spring会让这很容易。

答案 2 :(得分:0)

我建议您只有一项服务可以更新您的数据库,其他所有服务都可以通过它来完成。这样,您就可以控制事务和ID的管理方式。