当前位置: 首页 > 知识库问答 >
问题:

在编程中,“原子”是什么意思?

吕宣
2023-03-14

在有效Java书中,它指出:

语言规范保证,除非变量类型为longdouble[JLS,17.4.7],否则读取或写入变量是原子的。

在Java编程或一般编程的背景下,“原子”是什么意思?

共有3个答案

凤凡
2023-03-14

它“在系统的其他部分看来似乎是瞬间发生的”,属于计算过程中线性化的范畴。进一步引用这篇链接文章:

原子性是与并发进程隔离的保证。此外,原子操作通常有一个成功或失败的定义——它们要么成功地改变了系统的状态,要么没有明显的效果。

例如,在数据库系统的上下文中,可以有原子提交,这意味着您可以向关系数据库推送更新的更改集,这些更改要么全部提交,要么在失败的情况下根本不提交,以这种方式数据不会变得损坏,并随之产生锁和/或队列,下一个操作将是不同的写或读,但仅在事实之后。在变量和线程的上下文中,这与应用于内存的情况基本相同。

您的报价强调,这并非所有情况下都需要的行为。

戚俊人
2023-03-14

“原子操作”是指从所有其他线程的角度来看似乎是瞬时的操作。当保证适用时,您不需要担心部分完整的操作。

巫马星雨
2023-03-14

下面是一个例子:假设foolong类型的变量,那么以下操作不是原子操作(在Java中):

foo = 65465498L;

实际上,这个变量是用两个独立的操作来写的:一个写前32位,另一个写后32位。这意味着另一个线程可能会读取foo的值,并查看中间状态。

使操作原子化包括使用同步机制,以确保从任何其他线程将该操作视为单个原子(即不可拆分的部分)操作。这意味着,一旦操作被设置为原子,任何其他线程都将在赋值之前或赋值之后看到foo的值。但绝不是中间值。

这样做的一个简单方法是使变量不稳定:

private volatile long foo;

或同步对变量的每次访问:

public synchronized void setFoo(long value) {
    this.foo = value;
}

public synchronized long getFoo() {
    return this.foo;
}
// no other use of foo outside of these two methods, unless also synchronized

或者用原子龙替换它:

private AtomicLong foo;
 类似资料:
  • 问题内容: 在有效的Java书中,它指出: 语言规范保证,除非变量的类型或类型为[JLS,17.4.7],否则读写变量是原子的。 在Java编程或一般编程中,“原子”是什么意思? 问题答案: 这是一个示例,因为一个示例通常比冗长的解释更清晰。假设是类型为的变量。以下操作不是原子操作: 实际上,变量是使用两个单独的操作写入的:一个操作写入前32位,第二个操作写入后32位。这意味着另一个线程可能读取的

  • 问题内容: 我已经看过几次了,但我不清楚它的含义。您何时以及为什么要这样做? 我知道接口的作用,但是我不清楚这一点,这让我觉得我错过了正确使用它们的机会。 如果要这样做,是否只是这样: 您可以使用任何实现的类吗?您什么时候需要这样做?我唯一能想到的是,如果您有一个方法并且不确定要实现的对象将传递什么对象。我想不出您需要多久这样做一次。 另外,如何编写一个方法来接受实现接口的对象?那可能吗? 问题答

  • 问题内容: “&”在这里是什么意思: 问题答案: 这称为位掩码。它用于数字中各个位具有不同含义的情况,而不是数字仅表示数字本身(例如,如果您将年龄保存到数据库中)。 当您以二进制形式想象任何数字并想测试数字中是否设置了某个位时,可以通过对数字和要测试的位使用二进制AND运算符来对其进行测试,如下所示: 用二进制表示,这意味着以下内容(假设您的数字是25): 在这里您可以看到,第5位的数字(从下至上

  • 问题内容: 我已经看到了声明,接口和类 这是什么意思? 问题答案: 没有证据,我相信您在谈论Java的泛型支持… 泛型允许您抽象类型 在Java 5之前,很难提供能够支持多种不同类型的Objects的类而不必为每种特定情况编写代码,因此人们通常会这样做。 这导致在运行时做出许多困难的选择,您必须进行运行时检查以查看是否有可能将给定的Object强制转换为可用类型…例如 现在,这已经很明显了,但是如

  • 我在函数式编程和PLT圈子里听过“余代数”这个术语好几次,尤其是当讨论对象、副词、透镜等等的时候。谷歌这个术语给出的页面给出了这些结构的数学描述,这对我来说是很难理解的。谁能解释一下在编程环境中余代数的含义,它们的意义是什么,以及它们与对象和共轭子的关系?

  • 问题内容: 我正在学习python,但不确定是否理解以下语句:“该函数(包括其名称)可以捕获 我们对问题的看法或抽象 。” 这是我不理解编程含义的粗体部分。引用来自http://www.openbookproject.net/thinkcs/python/english3e/functions.html 像计算机科学家一样思考,第3版。 谢谢 ! 问题答案: 抽象是所有计算机科学中的核心概念。没有