如何解释原子行为?

时间:2012-01-07 18:56:36

标签: java concurrency atomic

什么是原子动作以及为什么需要它们?另外,如何在Java中实现原子操作?

我的理解是,在编程中,原子动作是一个有效发生的动作。原子动作不能在中间停止,要么完全发生,要么根本不发生。

例如,在线订购需要两个操作的机票:付款和座位预订。潜在的乘客必须要么。

  1. 支付和预留座位,或者
  2. 既不支付也不预留席位

5 个答案:

答案 0 :(得分:13)

你的解释,恕我直言,而不是解释数据库交易的原子性意味着什么:ACID中的A。

关于并发性,原子性相当意味着当线程修改某个对象(或对象集)的状态时,另一个线程无法看到任何中间状态。它可以看到操作前的状态,也可以看到操作后的状态。

例如,更改long变量的值不是原子操作。它涉及设置32个第一位的值,然后设置32个最后位的状态。如果未正确同步对long变量的访问,则线程可能会看到中间状态:32个第一位已更改,但32个最后位尚未更改。

实现原子操作的方法是使用同步。同步涉及使用

  • synchronized关键字
  • volatile关键字
  • 原子变量(AtomicInteger等)

答案 1 :(得分:2)

也许你应该考虑交易。制作一些流程但不保存更改,直到所有内容都有序。就像你从一台机器上取款一样,你需要遵循一系列步骤,然后才能看到你帐户的变化,即把你的卡,密码,说出你想要多少钱,然后收到钱。如果其中一个步骤出现问题,您就不会看到储蓄帐户中的更改,例如你的密码不正确,或者你试图提取的钱多于你拥有的......

您可以阅读java教程。 http://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html

答案 2 :(得分:1)

好吧,不是原子动作不能在中间停止。更多:全部当操作完成(提交)或根本不可见时(中止/回滚),他的效果变得可见;所以它可以被停止,但系统的状态不会更新。

答案 3 :(得分:1)

答案 4 :(得分:-1)

Atomicity - 表示在事务中执行所有语句或不执行任何语句。

如果交易有5个陈述。如果在运行所有语句之前发生故障,则原子性意味着执行5个语句或者不执行任何语句。