问题标签 [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 - 易失性布尔值与原子布尔值
AtomicBoolean 做了哪些 volatile 布尔值无法实现的功能?
java - AtomicBoolean 与同步块
我试图通过synchronized
用AtomicBoolean
.
这是一个例子synchronized
:
和替代方案AtomicBoolean
:
利用AtomicBoolean
CAS 属性应该比依赖同步快得多,所以我运行了一个小基准测试。
对于 10 个并发线程和 1000000 次迭代,AtomicBoolean
只比synchronized
块快一点。
使用 AtomicBoolean 在 toggleCondition() 上花费的平均时间(每个线程):0.0338
同步在 toggleCondition() 上花费的平均时间(每个线程):0.0357
我知道微基准值得它们的价值,但差异不应该更高吗?
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,没有问题。我怎样才能正确重置我的布尔值?谢谢
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 上进行调试
希望有人可以帮助我调试它并解释我的问题......
java - 如何在java中比较AtomicBoolean和布尔值
我正在尝试使用以下代码在 java 中的多线程应用程序中部署 TTAS:
但是我如何比较状态的值来检查它是真还是假,当我尝试旋转它的值时,每次我得到一个错误,说我正在尝试比较两个不同的变量的类型?经验:
谢谢你!
java - 同步的 volatile 布尔值是否等于 atomicBoolean?
当我们只对变量执行读取操作时,应该使用 Volatile,因为一个线程更新的值将对另一个线程可见,即使前一个线程失去 CPU 并退出同步块。那是对的吗?当需要使用原子行为时,将使用原子原语。例如 -
让我们假设 volatileBoolean 的值为 true。一个线程检查 volatileBoolean 为真并进入 if 块,第二个线程看到 volatileBoolean 的值为真,也进入 if 块。现在,让我们假设第一个线程将错误值(!volatileBoolean)分配给 volatileBoolean 变量并失去 CPU,因此退出 if 块。第二个线程将 volatileBoolean 视为 false,将其分配回 true。
这是应该使用 AtomicBoolean 的情况吗?如果是,为什么不能通过使用同步来处理?
java - AtomicBoolean 锁在哪里?
AtomicBoolean 使用本机代码进行同步。它如何转化为 java 锁?
有什么区别:
与:
我知道 synchronized(a) 是不需要的,因为 a 本身将确保操作是原子的。但是 synchronized (a) 中的锁与 a.set(true) 中的锁相同吗?
java - 这种使用 AtomicBoolean 是同步块的有效替代品吗?
考虑两个不能同时执行的方法 a() 和 b()。可以使用 synchronized 关键字来实现这一点,如下所示。我可以按照下面的代码使用 AtomicBoolean 达到相同的效果吗?
尝试使用 AtomicBoolean 实现与上述相同的效果:
android - 必须等待结果的方法的线程、原子布尔值、同步设计注意事项
我的代码开始变得有点难以调试,这让我相信我的设计选择并不理想。我是一名 Android 编程新手,希望在简化设计以实现最佳操作方面得到一些帮助。
介绍
我正在编写一个使用 rfcomm 接口在客户端和服务器设备之间传输数据的应用程序。客户端需要使用特定的密钥向服务器请求某些东西,然后它需要等到服务器将结果发回。
当前设计
- 按下按钮会触发来自服务器的信息请求。
- 启动一个执行请求的新线程。
- 作为唯一整数的密钥被转换为字节数组并发送到服务器。
- 线程有一个 while 循环,它正在等待特定的布尔值从 false 翻转为 true,指示服务器返回的响应。
- 在服务器端接收信息。服务器使用密钥来确定下一步要做什么。
- 服务器启动一个线程来运行一些查询并得到一个 jsonString 作为结果。
- 服务器将转换为字节数组的 jsonstring 以相同的标识密钥发送回客户端。
- 客户端读取消息,并根据识别键将字节数组发送给处理方法。
- 处理方法将 jsonString 存储到类变量中,然后翻转布尔值以让其他线程知道它正在等待的值已被设置。
- Json 字符串在客户端转换为对象。对那个对象做了一些事情。
此代码当前正确地将信息发送到服务器,服务器正确搜索并获得有效的 json 字符串结果。但是,当服务器将其结果写入客户端时会出现此问题。我收到 20 条消息而不是 1 条消息,但没有一条与搜索键匹配...
我的问题
- 我是否以设计明智的有效方式做事?
- 我可以从使用
synchronized
关键字 or 和 Atomic Boolean 使我的代码更线程安全中受益吗?我将如何实施它? - 将字符串转换为字节数组是否有最大长度?也许代码试图为我中断发送,这就是为什么我得到 20 个不同的结果?
相关代码
.
.
java - AtomicBoolean 中 getAndSet 和 compareAndSet 的区别
线程标题应该是不言自明的......我对AtomicBoolean
类中以下方法的规范有点困惑:
java.util.concurrent.atomic.AtomicBoolean#compareAndSet
java.util.concurrent.atomic.AtomicBoolean#getAndSet
我的假设是,当在条件中用作布尔子句时,两者都会导致相同的行为if
:
假设我想检索当前标志值并自动更新它,这两种方法不应该产生相同的行为吗?
如果我缺少内部差异,我将非常感谢有关如何以及何时使用其中的每一个的任何解释。