簡體   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