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

Multithread Java - synchronizing - warning Android Studio

我正在使用 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 行之间发生变化?

这是一个有效的警告吗?我错过了什么吗?

如果我使用 && 运算符将嵌套的 ifs 更改为单个 ifs,情况会发生变化吗?

这意味着,如果您指望一个值被另一个线程更改,这是一种危险的编程策略,并且编译器不会知道它被不同的朋友访问,并且会假设它没有被优化。

任何可能被多个线程访问的变量都需要声明为 volatile 以通知编译器它被多个线程访问,并且在处理它时需要特别小心。如果您不知道,我敢打赌您还有许多其他多线程错误等待发生。

如果涉及第二个线程并更改状态,那么该值肯定会在第 1 行和第 3 行之间更改。特别是因为您似乎没有任何类型的线程同步,无论是否有意。 诚然,该代码似乎有点不安全,因为如果没有某种并发控制,通常不会有两个线程访问同一个变量。但这是推测,因为我没有看到您的其余代码。

无论如何,这是警告,不是错误。有时警告是错误的,这就是它们可以被抑制的原因。

不过,您可以将此视为您正在做一些不安全的事情的迹象。如果您想讨论实际的同步方面,也许您可​​以 post 一些更多的代码?