问题标签 [atomicreference]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
135 浏览

java - 将同步方法转换为非阻塞算法

随便找了一些关于非阻塞算法的资料,所以想在实践中使用。我将一些代码从同步更改为非阻塞,所以我想问一下我是否把一切都做对了并保存了以前的功能。

同步代码:

我在非阻塞算法中的替代方案:

我做的一切都是正确的,还是我错过了什么?对代码和使用非阻塞方法设置 abject 有什么建议吗?

0 投票
2 回答
392 浏览

java - 可变原子引用是个坏主意吗?

我有一个数据结构,我偶尔希望修改,偶尔希望彻底替换。目前,我将它存储在 AtomicReference 中,并在我需要修改它而不是替换它时使用同步块(在 AtomicReference 本身上同步,而不是它的存储值)。

所以像:

请注意,修改调用是包装值的成员,而不是原子引用,并且不能保证其自身具有任何线程安全性。

这安全吗?Findbugs(一个免费的代码审查工具)有这个说法,所以现在我担心引擎盖下发生了一些事情,它可能会过早地释放锁或其他东西。我还看到将 AtomicReference 引用为专门用于不可变事物的文档。

这安全吗?如果不是,我可以创建我自己的引用存储类,我会更确定它的行为,但我不想草率下结论。

0 投票
2 回答
117 浏览

java - AtomicReference 的各个元素的数据竞争

我有一个关于通过 Atomic Reference 访问单个元素的问题。如果我有一个 IntegerArray 和一个对它的原子引用;通过 AtomicReference 变量读取和写入数组的各个元素会导致数据竞争吗?

在下面的代码中: num 是一个整数数组,其中 aRnumbers 是对数组的原子引用。在线程 1 和 2 中;我访问 aRnumbers.get()[1] 并将其增加 1。

在两个线程完成后,我可以通过原子引用访问单个元素,而无需每次都使用 22 作为主线程中 aRnumbers.get()[1] 的输出来获得准确的结果。

但是,由于原子引用是在数组上而不是在单个元素上定义的;在这种情况下不应该存在导致 21/22 作为输出的数据竞争吗?

在这种情况下,是否存在数据竞争是拥有 AtomicIntegerArray 数据结构的动机,该数据结构为每个元素提供单独的 AtomicReference ?

请在下面找到我正在尝试运行的 java 代码。任何人都可以让我知道我哪里出错了。

0 投票
2 回答
262 浏览

java - AtomicIntegerArray 中的数据竞争

在下面的代码中:我在 2 个线程中更新num[1]=0AtomicIntegerArraynum 1000 次。

在主线程中的 2 个线程结束时;值不应num[1]为 2000,因为AtomicIntegerArray.

但是我得到随机值 < 2000。有人可以告诉我为什么吗?

代码:

编辑:添加num.compareAndSet(1, num.get(1), num.get(1)+1);而不是也num.set(1,num.get(1)+1);不起作用。

0 投票
1 回答
137 浏览

android - 帮助文件中意图和活动导航的 AtomicReferences

在我的应用程序中,我在大约 5 个不同的屏幕之间导航,每个屏幕都有自己的activity. 几乎任何东西activity都可以从任何其他地方调用activity,所以我正在尝试构建一个帮助文件来管理它,intents这样我就没有多余的代码。

我用方法构建了一个帮助文件,并在调用这些方法时public static传递了活动和任何所需的数据。context这似乎在我的设备(三星 Galaxy S5)上运行良好,但 Android Studio 建议在我的帮助文件中创建我的意图 AtomicReference。

你能帮我理解这些是否应该以及为什么应该这样AtomicReference<Intent>吗?

另外,传递context给帮助文件来进行这些调用是否合适?

ActivityHelper 文件:

从 AppCompatActivity 中的菜单调用帮助文件的示例:

0 投票
1 回答
326 浏览

java - 使用 AtomicReference 的带参数的单例

我必须创建一个接受输入参数的单例。基本上我需要根据一些配置在库中创建一个 DBConnector。现在,此配置由消费应用程序传递给库。根据传入的配置,我想创建一个 DBConnector 实例,然后在库中重用它。我想过使用 DI 来处理这个问题,但是当这个库被初始化时,我不知道是否真的需要一个 DB 连接,如果不需要,我也不想创建这个 DBConnector。初始化库后,在调用 getResponse(RequestType rt) 时,我会知道是否需要 DBConnector(基于 RequestType),这就是我需要创建实例的时候。因此下面的代码看起来适合多线程环境?

}

编辑 写了一个多线程测试,所有线程都得到相同的实例。但是只是想确保我不会因为 Java 内存模型而错过任何边缘情况

0 投票
0 回答
93 浏览

java - 在这种情况下使用适当的原子指针

假设我在 Java 中实现了 Herlihy-Wing 队列:

我正在使用数组的类型atomic<int *>数据类型。items但是在入队方法中,我需要做类似的事情items[i].store(&x),这显然是错误的,因为它是一个悬空的参考。如何正确执行此操作?如果我使用堆,我也不知道何时释放该内存。我怎样才能做到这一点?

0 投票
1 回答
670 浏览

java - 你应该为单例模式使用 AtomicReference 吗?

我遇到了AtomicReference类,想知道这是否是创建一个可变且可以替换以进行测试的 Singleton 的好方法。

我知道双锁检查有问题,所以我不想走那条路。 自 JDK 1.5 起更正,https://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html
此外,我更愿意懒惰地实例化单例而不是初始化它。例如,在测试期间,我不想使用默认类SimpleExample,但在某些情况下,它要么创建成本高,要么在某些环境中存在问题。我希望能够在请求之前更换它。

以下是我的问题:

  1. 有很大的性能影响吗?
  2. 是否存在我不知道将其用作 Singleton 的问题?
  3. 什么是合理的选择?
0 投票
0 回答
2082 浏览

java - 将 AtomicReference 与 java lambda 一起使用是否合适?

我经常发现自己使用这个成语:

这是一个坏习惯,还是合法使用AtomicReference?

0 投票
1 回答
555 浏览

java - AtomicReference 无法避免 java 多线程中的竞争条件

我有一个“User.java”类,它的整数变量计数最初设置为 0。在另一个类“ThreadDemo.java”中,我在 AtomicReference 中设置了用户对象。这个“userRef”对象由“1000”线程共享,在每个线程中,我将“count”值增加 1。但在这里我没有得到预期的答案 1000。每次执行“count”变量时都会给出不同的值,如 1000 ,1002 等。但是如果我尝试使用同步或 AtomicInteger 则它可以工作。所以我的问题是,在这种情况下,我是否正确使用 AtomicReference 概念来解决竞争条件。如果是,那么为什么我在这种情况下会失败?. 请在下面找到这段代码:User.java:-

ThreadDemo.java:-