如何解释原子行为?

use*_*888 3 java concurrency atomic

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

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

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

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

JB *_*zet 13

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

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

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

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

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


Rog*_*ger 3

也许你应该考虑一下交易。进行一些处理,但在一切就绪之前不要保存更改。就像当您从机器上取款时一样,您需要遵循一系列步骤,然后才能看到帐户上的变化,即输入您的卡、您的密码、说出您想要多少钱,然后收到钱。如果其中一个步骤失败,您不会看到您的储蓄帐户发生变化,例如您的密码不正确,或者您试图提取的钱多于您拥有的金额...

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