问题标签 [atomicboolean]

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 投票
0 回答
70 浏览

java - unsafe 变量在哪里设置

在研究jdk源代码(jdk 1.8.0_111)时,我发现一段奇怪的代码如下:

问题:不安全变量在哪里设置?

0 投票
0 回答
392 浏览

java - 如何在方法中测试 atomicboolean

我想测试我的线程安全方法。为此,我正在使用 atomicboolean。如果为真,则抛出异常。现在我想测试这个功能。测试此功能的最佳方法是什么?

提前致谢

0 投票
2 回答
698 浏览

java - 在 AtomicBoolean 上同步?

在我正在开发的应用程序中,我发现了以下代码片段:

根据 FindBugs 的说法,这是不正确的,因为我不能AtomicBoolean一起使用synchronized并期望它阻止对象。

我的问题是:重写此方法的正确方法是什么?我已经阅读了有关将锁定对象与布尔属性一起使用的信息,但是为该锁定引入两个新属性似乎有点笨拙。

编辑:正如下面的评论中所述:我认为目的是在两个synchronized块中,AtomicBoolean不能更改,并且当一个线程位于其中一个synchronized块中时,不能输入其他这样的块。

0 投票
2 回答
54 浏览

java - 有没有办法计算访问线程到原始变量的数量?

我的代码中有一个变量,一个简单的原始布尔值 x。由于代码复杂性,我不确定访问它的线程数。也许它从不共享,或者只被一个线程使用,也许不是。如果它在线程之间共享,我需要使用它AtomicBoolean来代替。

有没有办法计算访问布尔 x 的线程?

到目前为止,我对代码进行了审查,但它非常复杂并且不是我编写的。

0 投票
1 回答
271 浏览

java - 与易失性“状态标志”布尔值同步?

我已经阅读了有关使用的“状态标志”模式volatile。它说volatile如果状态标志不依赖于任何其他状态,我可以在没有任何同步的情况下使用。它将保证标志对其他线程的可见性。此外,写入布尔值是原子的。

但是在另一个相关问题中,据说volotile只有一个线程可以修改标志时使用是安全的。否则,我需要使用任何同步或AtomicBoolean.

在我的示例中,我有stopped标志,但它可以在不止一个线程内进行修改:方法stop()continue(). doSmth()不更新任何状态。stop()如果假设在方法之后立即调用时不做工作是continue()可以的,那么代码是线程安全的吗?

至于我,应该。如果我错了,你能澄清一下吗?

0 投票
2 回答
146 浏览

java - 首先在 AtomicBoolean 中获取更新后的值

getAndSet返回“上一个”值然后设置更新值,我想要“反向”行为,返回更新值然后在AtomicBoolean对象中设置它。就像你做的那样

这里的分配先于评估。它可以AtomicBoolean单独完成还是我需要一个对我不利的自定义类。

我有这个

这是在一行中完成的,现在我被迫将布尔值作为可变对象传递,所以我不想创建自定义类并选择 AtomicBoolean。现在我正在寻找一种方法来以最少的努力完成相同的单行分配,而无需创建新类或额外的行表达式。

0 投票
2 回答
117 浏览

java - 是否有必要使“AtomicBoolean”也成为“volatile”?

我的理解:声明一个变量volatile可以保证其他线程对该变量的写入可见性。本质上,每个writevolatile 变量都发生在后续reads.

我了解它的原子性AtomicBoolean.compareAndSet()以及它如何提供不提供的read+write操作的原子性volatile。但我没有看到任何文档通过以下方式提供可见性保证AtomicBoolean

  1. 每个成功write的 byAtomicBoolean.compareAndSet() 最终都会对后续线程AtomicBoolean.get()AtomicBoolean.compareAndSet()其他线程可见。

但是,我一直看到标记为thread-safe这样的代码,

变量不应该executing也声明volatileprivate static volatile AtomicBoolean executing = new AtomicBoolean(false);?那么所需要的可见性保证AtomicBoolean就实现了吗?

0 投票
1 回答
58 浏览

java - 如果 2+ 个前端执行相同的请求,我怎样才能使后端只允许第一个请求而忽略其余请求?

我想做什么?

当 2+ 个前端通过套接字发出请求某些内容时,我只希望后端处理其中 1 个请求并拒绝其他请求。

当前尝试执行此操作的代码是什么?

后端代码。

对于建议的代码 2,也尝试了AtomicBoolean唯一的。

我期望结果是什么?

我考虑保留某种变量来检查是否create()应该仍然发生,期望只有 1 个请求通过。

实际结果是什么?

当 2+ 个前端通过套接字发出请求某些东西时,create()尽管内部有检查逻辑,但其中有 2 个会发生。

我认为问题可能是什么?

一个时间问题,因为 2+ 前端可以create()在没有适当检查的情况下同时访问此方法。代码的原始逻辑在它们不会同时触发的过程中起作用。我希望这是有道理的,因为很难说这对 Java 来说是新事物。

编辑:

我最终确定的工作解决方案是:

0 投票
2 回答
49 浏览

java - 在内部类中访问的原子变量

所以我在这里做一个排序并使用内部类实现 Comparator 接口,exceptionMessage 和 didJsonParsingFailed 是在内部类外部声明的变量,现在 java 不允许使用内部类访问局部变量,所以这给了我一个错误,但是当我将这两个变量设为原子变量“AtomicReference”和“AtomicBoolean”时,在这种情况下程序运行良好,我无法理解其背后的原因。使其成为 Atomic 有何帮助?java是否允许访问内部类中的AtomicVariables。

PS-我必须在我的 catch 块中修改这些变量,所以我不能让它成为最终的

0 投票
0 回答
50 浏览

android - AtomicBoolean 自动将值从 true 随机更改为 false

我正在开发 Android Things。我已经为我的应用程序编写了一个与串行端口交互的类。

在我的应用程序中,我有一个 AtomicBoolean (zeroRecieved) 对象,用于跟踪是否从称重秤接收到零值。
程序流程如下:
当 zeroRecieved 标志置位(true)时,系统将从称重秤接收到的数据发送到服务器,并清除 zeroRecieved 标志(置为 false)。
当系统从称重秤接收到 0.0 g/0.0 mg/0.0 kg(基本上是零值)时,它会重置 zeroRecieved(设置为 true)并继续流动。
如果在清除 zeroRecieved 时收到除 0(零值)以外的任何其他数据,系统将忽略该数据。

我观察到即使 zeroRecieved.set(false) 没有被执行,我的 AtomicBoolean (zeroRecieved) 对象也会自动从 true 清除为 false。我从称重秤收到零值,我设置 zeroRecieved 对象(设置为 true),然后从我的读取函数返回。但是在我的写函数中(在定时器上异步运行);检查 zeroRecieved 是否已清除,然后向称重秤发送去皮命令随机检测 zeroRecieved 为假,即使它设置为真。

我在 zeroRecieved.set(false) 行上添加了断点,但调试器从未到达该行。同样,我添加了调试日志消息,但它们也没有打印出来。调试器永远不会到达该行。

我已向所有 zeroRecieved.set(false) 行添加断点。调试器没有到达这一行。(请注意正确操作调试器到达这些行)

请注意,此问题是随机发生的,没有任何规律。