java中的同步

java中的同步,java,database,multithreading,jakarta-ee,thread-safety,Java,Database,Multithreading,Jakarta Ee,Thread Safety,在一次采访中,我被问及一个用例,采访者问: 假设你有一个银行账户,你正在网上购物 你哥哥有你的ATM卡,他要做一笔交易 你父亲去银行开了一张取款支票。全部的 这3个事务同时发生 如何管理这些交易,使余额不会透支 Me:我说过我会在账户余额对象上使用同步 面试官:不满意。下一个问题 有人能解释一下答案是什么吗?数据库锁或事务隔离是更好的方法吗 我是JAVA初学者,请原谅我的天真 通常,当你开始一个项目时,有些行为必须处理。事务隔离就是其中之一,因此我将在本例中评估最合适的事务级别。要了解更多信息,

在一次采访中,我被问及一个用例,采访者问:

假设你有一个银行账户,你正在网上购物 你哥哥有你的ATM卡,他要做一笔交易 你父亲去银行开了一张取款支票。全部的 这3个事务同时发生

如何管理这些交易,使余额不会透支

Me:我说过我会在账户余额对象上使用同步

面试官:不满意。下一个问题

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


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

通常,当你开始一个项目时,有些行为必须处理。事务隔离就是其中之一,因此我将在本例中评估最合适的事务级别。要了解更多信息,我建议您阅读有关视图序列化的内容。这是一种方法。

通常,当你开始一个项目时,有些行为必须处理。事务隔离就是其中之一,因此我将在本例中评估最合适的事务级别。要了解更多信息,我建议您阅读有关视图序列化的内容。这是一种方法

并发控制是数据库管理系统(DBMS)的概念 用于解决和同时访问或 多用户系统中可能发生的数据更改。并发性 控件应用于DBMS时,意味着要同时协调 事务,同时保持数据完整性。1并发性是 关于控制数据库的多用户访问

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

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

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

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

并发控制是数据库管理系统(DBMS)的概念 用于解决和同时访问或 多用户系统中可能发生的数据更改。并发性 控件应用于DBMS时,意味着要同时协调 事务,同时保持数据完整性。1并发性是 关于控制数据库的多用户访问

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

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

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


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

问题似乎在于理解数据库事务,而不是Java同步。当另一个事务中的事件使其无法完成时,数据库事务中会发生什么情况?@user6690200那么该怎么办?@khelwood我们在这里讨论的是数据库锁。比如拿着锁