繁体   English   中英

线程类变量未正确设置

[英]Threaded class variable not being set correctly

我有一个如下所示的线程类,该类应在m_bExit设置为false时终止。 布尔值m_bMessageReceived是在外部设置的。

public class CommsTimeout extends Thread {

    public static boolean m_bMessageReceived = false;
    public volatile boolean m_bExit = false;
    private static long m_nStartTime;

    public void run() {

        while (!m_bExit) {
            while ((System.currentTimeMillis() < (m_nStartTime + Constants.PERIOD))) {
                // Wait...
            }
            if (!m_bMessageReceived) {
                // Do stuff.
            }

            m_bMessageReceived = false;
        }
    }

    public CommsTimeout() {

        // Reset flags.
        m_bMessageReceived = false;
        m_bExit = false;
        m_nStartTime = System.currentTimeMillis();
        this.start();
    }
}

CommsTimeout类正在另一个类中初始化...

m_threadCommsTimeout = new CommsTimeout();

...并且每隔几毫秒就在另一个类中设置m_bMessageReceived

CommsTimeout.m_bMessageReceived = true;

我的问题是,即使在超时时间内将m_bMessageReceived设置为true ,仍会到达// Do stuff行。 我错过了什么? 谢谢!

这可能是可见性问题。 当将变量设置在另一个线程中时,不能保证您的线程会看到对m_bMessageReceived的更改。 尝试使m_bMessageReceived volatile 这将确保您的线程将看到该变量的最新值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM