gpt4 book ai didi

java - JavaME 和/或 Proguard 会重新排序分配吗?

转载 作者:行者123 更新时间:2023-11-30 04:39:44 26 4
gpt4 key购买 nike

这是一个简化的示例 - 我有两个线程:

JavaME 和/Proguard 是否可以重新排序 obX = ... 语句,以便 thread_B 在 ob1.someMethod 处出现空指针异常?

线程_A:

Object ob1 = null;
Object ob2 = null;
...
ob1 = something1;
ob2 = something2;

线程_B:

if (ob2 != null) {
ob1.someMethod();
...
}

附注我确实意识到同步这些可以避免这个问题。同步既有性能开销,更重要的是,有可能引入死锁。

最佳答案

当前版本的 ProGuard(截至撰写本文时最高版本为 4.8)不会对此类语句重新排序。但是,如果字段不是 volatile 的,Java 内存模型确实允许重新排序,因此您不应该依赖它。 Java 虚拟机、 future 版本的 ProGuard 或其他工具很可能会对代码进行重新排序。至少 volatile 字段不会引入死锁。

关于java - JavaME 和/或 Proguard 会重新排序分配吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12598013/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com