在java中同步

时间:2018-04-26 09:02:38

标签: java database multithreading java-ee thread-safety

在面试官询问的一次访谈中我被问到一个用例:

  

假设您有一个银行帐户并且正在进行网上购物   你的兄弟有你的ATM卡,他即将进行交易   你父亲去银行办理提款支票。所有   这3笔交易同时发生。

如何管理这些交易以使余额不透支?

:我说我会在帐户余额对象上使用同步

访员:不满意。下一个问题。

有人可以解释一下可能的答案吗?数据库锁定或事务隔离是否是更好的方法?

我是JAVA的初学者,请原谅我的天真。

2 个答案:

答案 0 :(得分:3)

  

并发控制是一种数据库管理系统(DBMS)概念   用于解决与同时访问或冲突的冲突   更改多用户系统可能发生的数据。并发   当应用于DBMS时,控制意味着同时协调   事务,同时保持数据完整性。 1并发是   即将控制数据库的多用户访问

基本时间戳是一种消除死锁的并发控制机制。此方法不使用锁来控制并发,因此不可能发生死锁。根据这种方法,为每个事务分配一个唯一的时间戳,通常显示它何时启动。这有效地允许将年龄分配给交易和分配订单。数据项具有读时间戳和写时间戳。每次分别读取或更新数据项时,都会更新这些时间戳。

当事务尝试读取由较年轻的事务写入的数据项时,在该系统中出现问题。这称为迟读。这意味着自初始事务开始时间以来数据项已更改,解决方案是回滚时间戳并获取新时间戳。当事务尝试写入已被较年轻的事务读取的数据项时,会发生另一个问题。这称为迟写。这意味着数据项已被另一个事务读取,因为事务的开始时间正在改变它。该问题的解决方案与后期读取问题的解决方案相同。必须回滚时间戳并获取新时间戳。

遵循基本时间戳过程的规则允许对事务进行序列化,然后可以创建按时间顺序排列的事务计划。对于具有高级别事务的较大数据库,时间戳可能不实用。在这些情况下,必须有大量的存储空间专门用于存储时间戳。

来源:-http://databasemanagement.wikia.com/wiki/Concurrency_Control

答案 1 :(得分:1)

通常,当您启动项目时,必须处理某种行为。事务隔离就是其中之一,所以在这种情况下我会评估最合适的事务级别。要了解更多信息,我建议您阅读有关视图序列化的信息。这是这样做的一种方式。

相关问题