当前位置: 首页 > 面试题库 >

AtomicInteger可以替换同步吗?

邢华清
2023-03-14
问题内容

java.util.concurrent.atomic软件包的javadoc表示以下内容:

一个小的类工具包,支持对单个变量进行无锁线程安全编程。

但是我没有在任何AtomicInteger或AtomicBoolean类中看到任何线程安全的(同步或锁定)代码。

因此,这2个是否相同:

1。

int i;
synchronized(this){i++;}

2。

AtomicInteger i = new AtomicInteger();
i.getAndIncrement();

更新 :感谢您的回答。使用AtomicInteger时需要挥发吗?


问题答案:

它们将提供相同的原子性。您唯一需要知道的是,任何时候我都必须用同步处理包装它

synchronized(this){ return i;}

编辑以回答您的编辑:

您的AtomicInteger不需要挥发。为了证明声明AtomicInteger最终。您需要AtomicInteger易变的唯一原因是AtomicInteger字段本身发生了变化。相似:

volatile AtomicInteger i = new AtomicInteger(0);

public void work(){
    i.incrementAndGet();
    //...do some other stuff
    i = new AtomicInteger(10);//because the field i is changing the field needs to be volatile 
}

正如您可以想象的那样,情况并非如此,因此您不必担心该字段易变。



 类似资料:
  • 问题内容: 假设我要实现一个非常简单的类,并且要注意并发和多线程问题, 即使是以下方法,还是要这样做吗? 另一方面,如果我们将所有方法都同步了,就不会再使用了,对吗? 问题答案: 将您的金额声明为不会阻止线程在方法执行过程中被抢占(如果未同步)。因此,举例来说,如果您的方法没有以任何方式同步,即使您的方法数量达到 这些问题称为比赛条件。一个可能的示例是,当两个线程尝试从同一帐户转移资金时。当一个线

  • java.util.concurrent.atomic.AtomicInteger类提供对底层int值的操作,可以原子方式读取和写入,还包含高级原子操作。 AtomicInteger支持底层int变量的原子操作。 它具有get和set方法,类似于对volatile变量的读写操作。 也就是说,集合与同一变量上的任何后续获取具有先发生关系。 原子compareAndSet方法也具有这些内存一致性功能。

  • 问题内容: 我正在使用 EclipseLink的JAXB实现的一些非标准扩展,并且要启用该实现,必须使用jaxb.properties对其进行配置。效果很好。 但是,由于生成错误,属性文件未包含在正确的位置,从而导致使用默认的JAXB,该文件没有任何错误,只是继续解析XML文件,忽略了非标准扩展名,给我留下了一个非工作bean。 为了使它更加健壮,我想摆脱属性文件,并在代码中指定上下文配置。由于它

  • 问题内容: 我正在尝试替换MySQL字段中的一堆字符。我知道REPLACE函数,但是一次只能替换一个字符串。我在手册中看不到任何适当的功能。 我可以一次替换或删除多个字符串吗?例如,我需要用破折号替换空格并删除其他标点符号。 问题答案: 您可以链接REPLACE函数: 这将打印。 您甚至可以使用子查询来替换多个字符串! 或使用JOIN替换它们: 我将使用常见的表表达式来进行翻译,作为读者的练习;)

  • 问题内容: 首先,当我问一个非常基本且特殊的问题时,我感到很遗憾;但是我对Java和编程都不陌生。我研究了system.out.println()中的“ out”是系统类的对象。“ out”可以用系统类的任何其他对象替换吗?如果是这样,成员是什么? 问题答案: 您可以拨打任何电话。如果您查看javadoc,则会发现另一个静态字段,即。例如: 如果您想用自己的输出流实际替换标准,则可以将流传递给或相

  • 是否可以调用一个异步方法,以便它从一个同步的方法异步运行?我不关心它挂起同步调用程序直到它返回,而是希望该方法被异步调用。