问题标签 [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 投票
11 回答
116840 浏览

java - 易失性布尔值与原子布尔值

AtomicBoolean 做了哪些 volatile 布尔值无法实现的功能?

0 投票
2 回答
11070 浏览

java - AtomicBoolean 与同步块

我试图通过synchronizedAtomicBoolean.

这是一个例子synchronized

和替代方案AtomicBoolean

利用AtomicBooleanCAS 属性应该比依赖同步快得多,所以我运行了一个小基准测试

对于 10 个并发线程和 1000000 次迭代,AtomicBoolean只比synchronized块快一点。

使用 AtomicBoolean 在 toggleCondition() 上花费的平均时间(每个线程):0.0338

同步在 toggleCondition() 上花费的平均时间(每个线程):0.0357

我知道微基准值得它们的价值,但差异不应该更高吗?

0 投票
0 回答
217 浏览

android - 如何从我的应用程序中的重置状态停止屏幕方向更改

当我的线程启动时,我将 an 设置AtomicBoolean为 true。最后,我在关联的处理程序中将其重置为 false。

当我在线程结束之前更改屏幕方向时:

  • onSaveInstanceState() 打印此布尔为 TRUE
  • onPause() 也打印 TRUE。-> 逻辑

线程结束,我再次改变方向:

  • 我的 Log.e "Bool" 打印 FALSE -> OK
  • onSaveInstanceState() 打印 TRUE -> 问题
  • onPause() 打印 TRUE -> 问题
  • onCreate() 打印 TRUE -> 问题

创建():

处理程序:

OnSaveInstanceState:

在 OnStop 方法中,我将布尔值设置为 false,在 OnPause 方法中,如果它存在,我将关闭我的 progressDialog。如果我在结束前不转动屏幕,bool 被重置为 FALSE,没有问题。我怎样才能正确重置我的布尔值?谢谢

0 投票
1 回答
84 浏览

android - atomisboolean 的多线程问题

在尝试“开发”代码以使用 android 设备驱动机器人时,我陷入了一个愚蠢的问题,在寻求解决数周后,我最终会向你寻求帮助。我对android和java都是全新的。我基本上使用的是蓝牙聊天示例,只是更改了主要布局,绘制了一个带有 4 个箭头的遥控器。为了使用这些箭头,我实现了一个函数,只要按下给定的 imageButton,它应该每 300 毫秒发送一个字节。看下面的代码,如果它是一团糟不要太生气(我是初学者):

atomicBoolean a 在类的开头设置为: private AtomicBoolean a = new AtomicBoolean(true);

我的问题如下:当我按下一个按钮并按住它时,logcat 显示“StringBuffer=0”,然后显示“a set to false”“S sent”“t.stop and return”,然后有一段时间什么都没有(大约 12秒)然后它开始循环“发送的消息”“渡渡鸟”,即使我抬起手指也没有结束。如果我不让手指太长(简单点击),我会得到:“stringBuffer=0”“S sent”“a set to false”“t.stop and return”“actionUp”“a set to true”“已发送消息”“dodo”“StringBuffer=0”“S 已发送”“t.stop 并返回”

我真的很迷茫,不明白这个功能是怎么回事。

如果有帮助,我正在三星 Galaxy Tab (GT-P1000) 固件版本 2.2.1 上进行调试

希望有人可以帮助我调试它并解释我的问题......

0 投票
1 回答
5562 浏览

java - 如何在java中比较AtomicBoolean和布尔值

我正在尝试使用以下代码在 java 中的多线程应用程序中部署 TTAS:

但是我如何比较状态的值来检查它是真还是假,当我尝试旋转它的值时,每次我得到一个错误,说我正在尝试比较两个不同的变量的类型?经验:

谢谢你!

0 投票
4 回答
1987 浏览

java - 同步的 volatile 布尔值是否等于 atomicBoolean?

当我们只对变量执行读取操作时,应该使用 Volatile,因为一个线程更新的值将对另一个线程可见,即使前一个线程失去 CPU 并退出同步块。那是对的吗?当需要使用原子行为时,将使用原子原语。例如 -

让我们假设 volatileBoolean 的值为 true。一个线程检查 volatileBoolean 为真并进入 if 块,第二个线程看到 volatileBoolean 的值为真,也进入 if 块。现在,让我们假设第一个线程将错误值(!volatileBoolean)分配给 volatileBoolean 变量并失去 CPU,因此退出 if 块。第二个线程将 volatileBoolean 视为 false,将其分配回 true。

这是应该使用 AtomicBoolean 的情况吗?如果是,为什么不能通过使用同步来处理?

0 投票
4 回答
2729 浏览

java - AtomicBoolean 锁在哪里?

AtomicBoolean 使用本机代码进行同步。它如何转化为 java 锁?

有什么区别:

与:

我知道 synchronized(a) 是不需要的,因为 a 本身将确保操作是原子的。但是 synchronized (a) 中的锁与 a.set(true) 中的锁相同吗?

0 投票
3 回答
1019 浏览

java - 这种使用 AtomicBoolean 是同步块的有效替代品吗?

考虑两个不能同时执行的方法 a() 和 b()。可以使用 synchronized 关键字来实现这一点,如下所示。我可以按照下面的代码使用 AtomicBoolean 达到相同的效果吗?

尝试使用 AtomicBoolean 实现与上述相同的效果:

0 投票
1 回答
113 浏览

android - 必须等待结果的方法的线程、原子布尔值、同步设计注意事项

我的代码开始变得有点难以调试,这让我相信我的设计选择并不理想。我是一名 Android 编程新手,希望在简化设计以实现最佳操作方面得到一些帮助。

介绍

我正在编写一个使用 rfcomm 接口在客户端和服务器设备之间传输数据的应用程序。客户端需要使用特定的密钥向服务器请求某些东西,然后它需要等到服务器将结果发回。

当前设计

  • 按下按钮会触发来自服务器的信息请求。
  • 启动一个执行请求的新线程。
  • 作为唯一整数的密钥被转换为字节数组并发送到服务器。
  • 线程有一个 while 循环,它正在等待特定的布尔值从 false 翻转为 true,指示服务器返回的响应。
  • 在服务器端接收信息。服务器使用密钥来确定下一步要做什么。
  • 服务器启动一个线程来运行一些查询并得到一个 jsonString 作为结果。
  • 服务器将转换为字节数组的 jsonstring 以相同的标识密钥发送回客户端。
  • 客户端读取消息,并根据识别键将字节数组发送给处理方法。
  • 处理方法将 jsonString 存储到类变量中,然后翻转布尔值以让其他线程知道它正在等待的值已被设置。
  • Json 字符串在客户端转换为对象。对那个对象做了一些事情。

此代码当前正确地将信息发送到服务器,服务器正确搜索并获得有效的 json 字符串结果。但是,当服务器将其结果写入客户端时会出现此问题。我收到 20 条消息而不是 1 条消息,但没有一条与搜索键匹配...

我的问题

  • 我是否以设计明智的有效方式做事?
  • 我可以从使用synchronized关键字 or 和 Atomic Boolean 使我的代码更线程安全中受益吗?我将如何实施它?
  • 将字符串转换为字节数组是否有最大长度?也许代码试图为我中断发送,这就是为什么我得到 20 个不同的结果?

相关代码

.

.

0 投票
4 回答
17463 浏览

java - AtomicBoolean 中 getAndSet 和 compareAndSet 的区别

线程标题应该是不言自明的......我对AtomicBoolean类中以下方法的规范有点困惑:

  • java.util.concurrent.atomic.AtomicBoolean#compareAndSet
  • java.util.concurrent.atomic.AtomicBoolean#getAndSet

我的假设是,当在条件中用作布尔子句时,两者都会导致相同的行为if

假设我想检索当前标志值并自动更新它,这两种方法不应该产生相同的行为吗?

如果我缺少内部差异,我将非常感谢有关如何以及何时使用其中的每一个的任何解释。