问题标签 [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.
java - unsafe 变量在哪里设置
在研究jdk源代码(jdk 1.8.0_111)时,我发现一段奇怪的代码如下:
问题:不安全变量在哪里设置?
java - 如何在方法中测试 atomicboolean
我想测试我的线程安全方法。为此,我正在使用 atomicboolean。如果为真,则抛出异常。现在我想测试这个功能。测试此功能的最佳方法是什么?
提前致谢
java - 在 AtomicBoolean 上同步?
在我正在开发的应用程序中,我发现了以下代码片段:
根据 FindBugs 的说法,这是不正确的,因为我不能AtomicBoolean
一起使用synchronized
并期望它阻止对象。
我的问题是:重写此方法的正确方法是什么?我已经阅读了有关将锁定对象与布尔属性一起使用的信息,但是为该锁定引入两个新属性似乎有点笨拙。
编辑:正如下面的评论中所述:我认为目的是在两个synchronized
块中,AtomicBoolean
不能更改,并且当一个线程位于其中一个synchronized
块中时,不能输入其他这样的块。
java - 有没有办法计算访问线程到原始变量的数量?
我的代码中有一个变量,一个简单的原始布尔值 x。由于代码复杂性,我不确定访问它的线程数。也许它从不共享,或者只被一个线程使用,也许不是。如果它在线程之间共享,我需要使用它AtomicBoolean
来代替。
有没有办法计算访问布尔 x 的线程?
到目前为止,我对代码进行了审查,但它非常复杂并且不是我编写的。
java - 与易失性“状态标志”布尔值同步?
我已经阅读了有关使用的“状态标志”模式volatile
。它说volatile
如果状态标志不依赖于任何其他状态,我可以在没有任何同步的情况下使用。它将保证标志对其他线程的可见性。此外,写入布尔值是原子的。
但是在另一个相关问题中,据说volotile
只有一个线程可以修改标志时使用是安全的。否则,我需要使用任何同步或AtomicBoolean
.
在我的示例中,我有stopped
标志,但它可以在不止一个线程内进行修改:方法stop()
和continue()
. doSmth()
不更新任何状态。stop()
如果假设在方法之后立即调用时不做工作是continue()
可以的,那么代码是线程安全的吗?
至于我,应该。如果我错了,你能澄清一下吗?
java - 首先在 AtomicBoolean 中获取更新后的值
getAndSet
返回“上一个”值然后设置更新值,我想要“反向”行为,返回更新值然后在AtomicBoolean
对象中设置它。就像你做的那样
这里的分配先于评估。它可以AtomicBoolean
单独完成还是我需要一个对我不利的自定义类。
我有这个
这是在一行中完成的,现在我被迫将布尔值作为可变对象传递,所以我不想创建自定义类并选择 AtomicBoolean。现在我正在寻找一种方法来以最少的努力完成相同的单行分配,而无需创建新类或额外的行表达式。
java - 是否有必要使“AtomicBoolean”也成为“volatile”?
我的理解:声明一个变量volatile
可以保证其他线程对该变量的写入可见性。本质上,每个write
volatile 变量都发生在后续reads
.
我了解它的原子性AtomicBoolean.compareAndSet()
以及它如何提供不提供的read+write
操作的原子性volatile
。但我没有看到任何文档通过以下方式提供可见性保证AtomicBoolean
:
- 每个成功
write
的 byAtomicBoolean.compareAndSet()
最终都会对后续线程AtomicBoolean.get()
和AtomicBoolean.compareAndSet()
其他线程可见。
但是,我一直看到标记为thread-safe
这样的代码,
变量不应该executing
也声明volatile
吗private static volatile AtomicBoolean executing = new AtomicBoolean(false);
?那么所需要的可见性保证AtomicBoolean
就实现了吗?
java - 如果 2+ 个前端执行相同的请求,我怎样才能使后端只允许第一个请求而忽略其余请求?
我想做什么?
当 2+ 个前端通过套接字发出请求某些内容时,我只希望后端处理其中 1 个请求并拒绝其他请求。
当前尝试执行此操作的代码是什么?
后端代码。
对于建议的代码 2,也尝试了AtomicBoolean
唯一的。
我期望结果是什么?
我考虑保留某种变量来检查是否create()
应该仍然发生,期望只有 1 个请求通过。
实际结果是什么?
当 2+ 个前端通过套接字发出请求某些东西时,create()
尽管内部有检查逻辑,但其中有 2 个会发生。
我认为问题可能是什么?
一个时间问题,因为 2+ 前端可以create()
在没有适当检查的情况下同时访问此方法。代码的原始逻辑在它们不会同时触发的过程中起作用。我希望这是有道理的,因为很难说这对 Java 来说是新事物。
编辑:
我最终确定的工作解决方案是:
java - 在内部类中访问的原子变量
所以我在这里做一个排序并使用内部类实现 Comparator 接口,exceptionMessage 和 didJsonParsingFailed 是在内部类外部声明的变量,现在 java 不允许使用内部类访问局部变量,所以这给了我一个错误,但是当我将这两个变量设为原子变量“AtomicReference”和“AtomicBoolean”时,在这种情况下程序运行良好,我无法理解其背后的原因。使其成为 Atomic 有何帮助?java是否允许访问内部类中的AtomicVariables。
PS-我必须在我的 catch 块中修改这些变量,所以我不能让它成为最终的
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) 行添加断点。调试器没有到达这一行。(请注意正确操作调试器到达这些行)
请注意,此问题是随机发生的,没有任何规律。