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

原子包类(如AtomicInteger等)如何工作

羿经武
2023-03-14
问题内容

我已经读到,使用原子包类使我们能够做到线程安全,减少代码锁定。但是我不确定原子包类中的方法如何在不使用锁或任何syncize关键字的情况下如何提供线程安全性。任何帮助将不胜感激。


问题答案:

他们使用非常低级的指令,例如Compare和Swap,以及sun.misc.Unsafe类中的多种其他方法。

基本上,像这样的方法调用compareAndSwap()将对应于唯一的处理器指令,从而消除了许多多线程问题。



 类似资料:
  • 启动C 20时,原子的操作有等待操作和通知操作。但我不知道它们到底是怎么工作的。cppreference说: 执行原子等待操作。表现为它重复执行以下步骤: 比较此的值表示形式- 这些函数保证仅在值发生更改时返回,即使底层实现错误地解除了阻塞。 我不太明白这两个部分是如何相互关联的。这是否意味着如果值没有更改,那么即使我使用了notify\u one()/方法,函数也不会返回?这意味着该操作在某种程

  • 问题内容: 使用两个概念:CAS和变量。 使用变量可确保当前值对所有线程可见,并且不会被缓存。 但是我对以下解释的CAS(compare AND set)概念感到困惑: 我的问题是什么回报?值不会更新吗?在这种情况下,当线程执行以下情况时会发生什么: 问题答案: 原子对象利用Compare和Swap机制使它们成为原子- 即可以保证该值 是 指定的 ,并且现在 是新值。 您发布的代码不断尝试将当前值

  • 有人解释一下为什么吗?多谢了。 *注意:在运行函数中。如果我使用System.out.println(next);有时我也会看到一些丢失的测序器。* 示例输出1:

  • 问题内容: 我们知道,主要的内存域很少:Young,Tenured(Old gen)和PermGen。 年轻领域分为伊甸园和幸存者(两个)。 OldGen用于保留对象。 MaxTenuringThreshold可以防止将对象最终过早地复制到OldGen空间。这很清楚而且可以理解。 但是它如何工作?垃圾收集器如何处理这些仍存活到MaxTenuringThreshold的对象,并且以什么方式处理?他们

  • 我的困惑从这里开始,假设我们在HDFS中有一些数据需要使用下面运行在hadoop代码中的Java代码来处理 在这段代码中,Hadoop的类型类似于LongWritable,Text,intwritable。 让我们选择包裹在Java字符串类型周围的Text类型(如果是错误的请纠正我)。 我的疑问是,当我们在上面的代码中将这些参数传递给我们的方法映射时,这些参数如何与)交互 下面是文本类代码 我的第

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