java - 多线程 Java - 同步 - 警告 Android Studio

标签 java android multithreading intellij-idea

我正在使用 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/

相关文章:

linux - 如何为 3 个不同的事件(信号量、pthread 条件和阻塞套接字接收)阻塞单个线程?

multithreading - 如果运行 "inside"VM,我们会在 Chapel 中看到预期的加速吗?

Java流套接字只能发送一次

java - Android 多个标记未在 map 上绘制

java - 创建返回 boolean 值的方法数组并迭代 for-each 循环

java - 连接 JSONArrays

android - 如何让 React-Native 通过 AccessibiliyManager 宣布特定的可访问性消息?

android - 无法在 xml 定义的 Activity 中找到 onClick 方法

java - 在 Swing 中没有得到预期的输出

java - 无法使用log4j创建日志文件