我正在使用 Android Studio (intelliJ-idea) 进行 Android 开发。我收到关于这段代码的警告:
if (status == STATUS_SOLVING) {
if (!solverThread.isAlive())
if (status != STATUS_SOLVED) // <<<<<< WARNING THIS LINE
status = STATUS_DATA_COLLECTING;
}
上面指出的行给了我一个警告,说这个条件始终为真。如果整个程序在单个线程上运行,我可以明白为什么这是真的。
但是由于我的程序使用并行线程来更改 status
的值,这是否意味着此条件可能会在上面代码段中的第 #1 行和第 #3 行之间发生变化?
这是一个有效的警告吗?我错过了什么吗?
如果我使用 &&
运算符将嵌套的 if 更改为单个 if,情况会发生变化吗?
最佳答案
这意味着,如果您指望另一个线程更改某个值,那么这是一种危险的编程策略,并且编译器不会知道它正在被不同的 friend 访问,并且会在假设没有被访问的情况下进行优化。
任何可能被多个线程触及的变量都需要声明为 volatile,以通知编译器它被多个线程触及,并且在处理它时需要特别小心。如果您不知道,我敢打赌您还有十几个其他多线程错误正在等待发生。
关于java - 多线程 Java - 同步 - 警告 Android Studio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29041755/